Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / Serialization / System / Runtime / Serialization / PrimitiveDataContract.cs / 2 / PrimitiveDataContract.cs
//------------------------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- namespace System.Runtime.Serialization { using System; using System.Collections; using System.Collections.Generic; using System.Globalization; using System.Reflection; using System.Xml; using System.Security; internal abstract class PrimitiveDataContract : DataContract { ////// Critical - holds instance of CriticalHelper which keeps state that is cached statically for serialization. /// Static fields are marked SecurityCritical or readonly to prevent /// data from being modified or leaked to other components in appdomain. /// [SecurityCritical] PrimitiveDataContractCriticalHelper helper; ////// Critical - initializes SecurityCritical field 'helper' /// Safe - doesn't leak anything /// [SecurityCritical, SecurityTreatAsSafe] protected PrimitiveDataContract(Type type, XmlDictionaryString name, XmlDictionaryString ns) : base(new PrimitiveDataContractCriticalHelper(type, name, ns)) { helper = base.Helper as PrimitiveDataContractCriticalHelper; } static internal PrimitiveDataContract GetPrimitiveDataContract(Type type) { return DataContract.GetBuiltInDataContract(type) as PrimitiveDataContract; } static internal PrimitiveDataContract GetPrimitiveDataContract(string name, string ns) { return DataContract.GetBuiltInDataContract(name, ns) as PrimitiveDataContract; } internal abstract string WriteMethodName { get; } internal abstract string ReadMethodName { get; } internal override XmlDictionaryString TopLevelElementNamespace { get { return DictionaryGlobals.SerializationNamespace; } set { } } internal override bool CanContainReferences { get { return false; } } internal override bool IsPrimitive { get { return true; } } internal override bool IsBuiltInDataContract { get { return true; } } internal MethodInfo XmlFormatWriterMethod { ////// Critical - fetches the critical XmlFormatWriterMethod property /// Safe - XmlFormatWriterMethod only needs to be protected for write; initialized in getter if null /// [SecurityCritical, SecurityTreatAsSafe] get { if (helper.XmlFormatWriterMethod == null) { if (UnderlyingType.IsValueType) helper.XmlFormatWriterMethod = typeof(XmlWriterDelegator).GetMethod(WriteMethodName, Globals.ScanAllMembers, null, new Type[] { UnderlyingType, typeof(XmlDictionaryString), typeof(XmlDictionaryString) }, null); else helper.XmlFormatWriterMethod = typeof(XmlObjectSerializerWriteContext).GetMethod(WriteMethodName, Globals.ScanAllMembers, null, new Type[] { typeof(XmlWriterDelegator), UnderlyingType, typeof(XmlDictionaryString), typeof(XmlDictionaryString) }, null); } return helper.XmlFormatWriterMethod; } } internal MethodInfo XmlFormatContentWriterMethod { ////// Critical - fetches the critical XmlFormatContentWriterMethod property /// Safe - XmlFormatContentWriterMethod only needs to be protected for write; initialized in getter if null /// [SecurityCritical, SecurityTreatAsSafe] get { if (helper.XmlFormatContentWriterMethod == null) { if (UnderlyingType.IsValueType) helper.XmlFormatContentWriterMethod = typeof(XmlWriterDelegator).GetMethod(WriteMethodName, Globals.ScanAllMembers, null, new Type[] { UnderlyingType }, null); else helper.XmlFormatContentWriterMethod = typeof(XmlObjectSerializerWriteContext).GetMethod(WriteMethodName, Globals.ScanAllMembers, null, new Type[] { typeof(XmlWriterDelegator), UnderlyingType }, null); } return helper.XmlFormatContentWriterMethod; } } internal MethodInfo XmlFormatReaderMethod { ////// Critical - fetches the critical XmlFormatReaderMethod property /// Safe - XmlFormatReaderMethod only needs to be protected for write; initialized in getter if null /// [SecurityCritical, SecurityTreatAsSafe] get { if (helper.XmlFormatReaderMethod == null) { helper.XmlFormatReaderMethod = typeof(XmlReaderDelegator).GetMethod(ReadMethodName, Globals.ScanAllMembers); } return helper.XmlFormatReaderMethod; } } public override void WriteXmlValue(XmlWriterDelegator xmlWriter, object obj, XmlObjectSerializerWriteContext context) { xmlWriter.WriteAnyType(obj); } protected object HandleReadValue(object obj, XmlObjectSerializerReadContext context) { context.AddNewObject(obj); return obj; } protected bool TryReadNullAtTopLevel(XmlReaderDelegator reader) { Attributes attributes = new Attributes(); attributes.Read(reader); if (attributes.Ref != Globals.NewObjectId) throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(XmlObjectSerializer.CreateSerializationException(SR.GetString(SR.CannotDeserializeRefAtTopLevel, attributes.Ref))); if (attributes.XsiNil) { reader.Skip(); return true; } return false; } ////// Critical - holds all state used for for (de)serializing primitives. /// since the data is cached statically, we lock down access to it. /// [SecurityCritical(SecurityCriticalScope.Everything)] class PrimitiveDataContractCriticalHelper : DataContract.DataContractCriticalHelper { MethodInfo xmlFormatWriterMethod; MethodInfo xmlFormatContentWriterMethod; MethodInfo xmlFormatReaderMethod; internal PrimitiveDataContractCriticalHelper(Type type, XmlDictionaryString name, XmlDictionaryString ns) : base(type) { SetDataContractName(name, ns); } internal MethodInfo XmlFormatWriterMethod { get { return xmlFormatWriterMethod; } set { xmlFormatWriterMethod = value; } } internal MethodInfo XmlFormatContentWriterMethod { get { return xmlFormatContentWriterMethod; } set { xmlFormatContentWriterMethod = value; } } internal MethodInfo XmlFormatReaderMethod { get { return xmlFormatReaderMethod; } set { xmlFormatReaderMethod = value; } } } } internal class CharDataContract : PrimitiveDataContract { internal CharDataContract() : this(DictionaryGlobals.CharLocalName, DictionaryGlobals.SerializationNamespace) { } internal CharDataContract(XmlDictionaryString name, XmlDictionaryString ns) : base(typeof(char), name, ns) { } internal override string WriteMethodName { get { return "WriteChar"; } } internal override string ReadMethodName { get { return "ReadElementContentAsChar"; } } public override void WriteXmlValue(XmlWriterDelegator writer, object obj, XmlObjectSerializerWriteContext context) { writer.WriteChar((char)obj); } public override object ReadXmlValue(XmlReaderDelegator reader, XmlObjectSerializerReadContext context) { return (context == null) ? reader.ReadElementContentAsChar() : HandleReadValue(reader.ReadElementContentAsChar(), context); } } internal class AsmxCharDataContract : CharDataContract { internal AsmxCharDataContract() : base(DictionaryGlobals.CharLocalName, DictionaryGlobals.AsmxTypesNamespace) { } } internal class BooleanDataContract : PrimitiveDataContract { internal BooleanDataContract() : base(typeof(bool), DictionaryGlobals.BooleanLocalName, DictionaryGlobals.SchemaNamespace) { } internal override string WriteMethodName { get { return "WriteBoolean"; } } internal override string ReadMethodName { get { return "ReadElementContentAsBoolean"; } } public override void WriteXmlValue(XmlWriterDelegator writer, object obj, XmlObjectSerializerWriteContext context) { writer.WriteBoolean((bool)obj); } public override object ReadXmlValue(XmlReaderDelegator reader, XmlObjectSerializerReadContext context) { return (context == null) ? reader.ReadElementContentAsBoolean() : HandleReadValue(reader.ReadElementContentAsBoolean(), context); } } internal class SignedByteDataContract : PrimitiveDataContract { internal SignedByteDataContract() : base(typeof(sbyte), DictionaryGlobals.SignedByteLocalName, DictionaryGlobals.SchemaNamespace) { } internal override string WriteMethodName { get { return "WriteSignedByte"; } } internal override string ReadMethodName { get { return "ReadElementContentAsSignedByte"; } } public override void WriteXmlValue(XmlWriterDelegator writer, object obj, XmlObjectSerializerWriteContext context) { writer.WriteSignedByte((sbyte)obj); } public override object ReadXmlValue(XmlReaderDelegator reader, XmlObjectSerializerReadContext context) { return (context == null) ? reader.ReadElementContentAsSignedByte() : HandleReadValue(reader.ReadElementContentAsSignedByte(), context); } } internal class UnsignedByteDataContract : PrimitiveDataContract { internal UnsignedByteDataContract() : base(typeof(byte), DictionaryGlobals.UnsignedByteLocalName, DictionaryGlobals.SchemaNamespace) { } internal override string WriteMethodName { get { return "WriteUnsignedByte"; } } internal override string ReadMethodName { get { return "ReadElementContentAsUnsignedByte"; } } public override void WriteXmlValue(XmlWriterDelegator writer, object obj, XmlObjectSerializerWriteContext context) { writer.WriteUnsignedByte((byte)obj); } public override object ReadXmlValue(XmlReaderDelegator reader, XmlObjectSerializerReadContext context) { return (context == null) ? reader.ReadElementContentAsUnsignedByte() : HandleReadValue(reader.ReadElementContentAsUnsignedByte(), context); } } internal class ShortDataContract : PrimitiveDataContract { internal ShortDataContract() : base(typeof(short), DictionaryGlobals.ShortLocalName, DictionaryGlobals.SchemaNamespace) { } internal override string WriteMethodName { get { return "WriteShort"; } } internal override string ReadMethodName { get { return "ReadElementContentAsShort"; } } public override void WriteXmlValue(XmlWriterDelegator writer, object obj, XmlObjectSerializerWriteContext context) { writer.WriteShort((short)obj); } public override object ReadXmlValue(XmlReaderDelegator reader, XmlObjectSerializerReadContext context) { return (context == null) ? reader.ReadElementContentAsShort() : HandleReadValue(reader.ReadElementContentAsShort(), context); } } internal class UnsignedShortDataContract : PrimitiveDataContract { internal UnsignedShortDataContract() : base(typeof(ushort), DictionaryGlobals.UnsignedShortLocalName, DictionaryGlobals.SchemaNamespace) { } internal override string WriteMethodName { get { return "WriteUnsignedShort"; } } internal override string ReadMethodName { get { return "ReadElementContentAsUnsignedShort"; } } public override void WriteXmlValue(XmlWriterDelegator writer, object obj, XmlObjectSerializerWriteContext context) { writer.WriteUnsignedShort((ushort)obj); } public override object ReadXmlValue(XmlReaderDelegator reader, XmlObjectSerializerReadContext context) { return (context == null) ? reader.ReadElementContentAsUnsignedShort() : HandleReadValue(reader.ReadElementContentAsUnsignedShort(), context); } } internal class IntDataContract : PrimitiveDataContract { internal IntDataContract() : base(typeof(int), DictionaryGlobals.IntLocalName, DictionaryGlobals.SchemaNamespace) { } internal override string WriteMethodName { get { return "WriteInt"; } } internal override string ReadMethodName { get { return "ReadElementContentAsInt"; } } public override void WriteXmlValue(XmlWriterDelegator writer, object obj, XmlObjectSerializerWriteContext context) { writer.WriteInt((int)obj); } public override object ReadXmlValue(XmlReaderDelegator reader, XmlObjectSerializerReadContext context) { return (context == null) ? reader.ReadElementContentAsInt() : HandleReadValue(reader.ReadElementContentAsInt(), context); } } internal class UnsignedIntDataContract : PrimitiveDataContract { internal UnsignedIntDataContract() : base(typeof(uint), DictionaryGlobals.UnsignedIntLocalName, DictionaryGlobals.SchemaNamespace) { } internal override string WriteMethodName { get { return "WriteUnsignedInt"; } } internal override string ReadMethodName { get { return "ReadElementContentAsUnsignedInt"; } } public override void WriteXmlValue(XmlWriterDelegator writer, object obj, XmlObjectSerializerWriteContext context) { writer.WriteUnsignedInt((uint)obj); } public override object ReadXmlValue(XmlReaderDelegator reader, XmlObjectSerializerReadContext context) { return (context == null) ? reader.ReadElementContentAsUnsignedInt() : HandleReadValue(reader.ReadElementContentAsUnsignedInt(), context); } } internal class LongDataContract : PrimitiveDataContract { internal LongDataContract() : this(DictionaryGlobals.LongLocalName, DictionaryGlobals.SchemaNamespace) { } internal LongDataContract(XmlDictionaryString name, XmlDictionaryString ns) : base(typeof(long), name, ns) { } internal override string WriteMethodName { get { return "WriteLong"; } } internal override string ReadMethodName { get { return "ReadElementContentAsLong"; } } public override void WriteXmlValue(XmlWriterDelegator writer, object obj, XmlObjectSerializerWriteContext context) { writer.WriteLong((long)obj); } public override object ReadXmlValue(XmlReaderDelegator reader, XmlObjectSerializerReadContext context) { return (context == null) ? reader.ReadElementContentAsLong() : HandleReadValue(reader.ReadElementContentAsLong(), context); } } internal class IntegerDataContract : LongDataContract { internal IntegerDataContract() : base(DictionaryGlobals.integerLocalName, DictionaryGlobals.SchemaNamespace) { } } internal class PositiveIntegerDataContract : LongDataContract { internal PositiveIntegerDataContract() : base(DictionaryGlobals.positiveIntegerLocalName, DictionaryGlobals.SchemaNamespace) { } } internal class NegativeIntegerDataContract : LongDataContract { internal NegativeIntegerDataContract() : base(DictionaryGlobals.negativeIntegerLocalName, DictionaryGlobals.SchemaNamespace) { } } internal class NonPositiveIntegerDataContract : LongDataContract { internal NonPositiveIntegerDataContract() : base(DictionaryGlobals.nonPositiveIntegerLocalName, DictionaryGlobals.SchemaNamespace) { } } internal class NonNegativeIntegerDataContract : LongDataContract { internal NonNegativeIntegerDataContract() : base(DictionaryGlobals.nonNegativeIntegerLocalName, DictionaryGlobals.SchemaNamespace) { } } internal class UnsignedLongDataContract : PrimitiveDataContract { internal UnsignedLongDataContract() : base(typeof(ulong), DictionaryGlobals.UnsignedLongLocalName, DictionaryGlobals.SchemaNamespace) { } internal override string WriteMethodName { get { return "WriteUnsignedLong"; } } internal override string ReadMethodName { get { return "ReadElementContentAsUnsignedLong"; } } public override void WriteXmlValue(XmlWriterDelegator writer, object obj, XmlObjectSerializerWriteContext context) { writer.WriteUnsignedLong((ulong)obj); } public override object ReadXmlValue(XmlReaderDelegator reader, XmlObjectSerializerReadContext context) { return (context == null) ? reader.ReadElementContentAsUnsignedLong() : HandleReadValue(reader.ReadElementContentAsUnsignedLong(), context); } } internal class FloatDataContract : PrimitiveDataContract { internal FloatDataContract() : base(typeof(float), DictionaryGlobals.FloatLocalName, DictionaryGlobals.SchemaNamespace) { } internal override string WriteMethodName { get { return "WriteFloat"; } } internal override string ReadMethodName { get { return "ReadElementContentAsFloat"; } } public override void WriteXmlValue(XmlWriterDelegator writer, object obj, XmlObjectSerializerWriteContext context) { writer.WriteFloat((float)obj); } public override object ReadXmlValue(XmlReaderDelegator reader, XmlObjectSerializerReadContext context) { return (context == null) ? reader.ReadElementContentAsFloat() : HandleReadValue(reader.ReadElementContentAsFloat(), context); } } internal class DoubleDataContract : PrimitiveDataContract { internal DoubleDataContract() : base(typeof(double), DictionaryGlobals.DoubleLocalName, DictionaryGlobals.SchemaNamespace) { } internal override string WriteMethodName { get { return "WriteDouble"; } } internal override string ReadMethodName { get { return "ReadElementContentAsDouble"; } } public override void WriteXmlValue(XmlWriterDelegator writer, object obj, XmlObjectSerializerWriteContext context) { writer.WriteDouble((double)obj); } public override object ReadXmlValue(XmlReaderDelegator reader, XmlObjectSerializerReadContext context) { return (context == null) ? reader.ReadElementContentAsDouble() : HandleReadValue(reader.ReadElementContentAsDouble(), context); } } internal class DecimalDataContract : PrimitiveDataContract { internal DecimalDataContract() : base(typeof(decimal), DictionaryGlobals.DecimalLocalName, DictionaryGlobals.SchemaNamespace) { } internal override string WriteMethodName { get { return "WriteDecimal"; } } internal override string ReadMethodName { get { return "ReadElementContentAsDecimal"; } } public override void WriteXmlValue(XmlWriterDelegator writer, object obj, XmlObjectSerializerWriteContext context) { writer.WriteDecimal((decimal)obj); } public override object ReadXmlValue(XmlReaderDelegator reader, XmlObjectSerializerReadContext context) { return (context == null) ? reader.ReadElementContentAsDecimal() : HandleReadValue(reader.ReadElementContentAsDecimal(), context); } } internal class DateTimeDataContract : PrimitiveDataContract { internal DateTimeDataContract() : base(typeof(DateTime), DictionaryGlobals.DateTimeLocalName, DictionaryGlobals.SchemaNamespace) { } internal override string WriteMethodName { get { return "WriteDateTime"; } } internal override string ReadMethodName { get { return "ReadElementContentAsDateTime"; } } public override void WriteXmlValue(XmlWriterDelegator writer, object obj, XmlObjectSerializerWriteContext context) { writer.WriteDateTime((DateTime)obj); } public override object ReadXmlValue(XmlReaderDelegator reader, XmlObjectSerializerReadContext context) { return (context == null) ? reader.ReadElementContentAsDateTime() : HandleReadValue(reader.ReadElementContentAsDateTime(), context); } } internal class StringDataContract : PrimitiveDataContract { internal StringDataContract() : this(DictionaryGlobals.StringLocalName, DictionaryGlobals.SchemaNamespace) { } internal StringDataContract(XmlDictionaryString name, XmlDictionaryString ns) : base(typeof(string), name, ns) { } internal override string WriteMethodName { get { return "WriteString"; } } internal override string ReadMethodName { get { return "ReadElementContentAsString"; } } public override void WriteXmlValue(XmlWriterDelegator writer, object obj, XmlObjectSerializerWriteContext context) { writer.WriteString((string)obj); } public override object ReadXmlValue(XmlReaderDelegator reader, XmlObjectSerializerReadContext context) { if (context == null) { return TryReadNullAtTopLevel(reader) ? null : reader.ReadElementContentAsString(); } else { return HandleReadValue(reader.ReadElementContentAsString(), context); } } } internal class TimeDataContract : StringDataContract { internal TimeDataContract() : base(DictionaryGlobals.timeLocalName, DictionaryGlobals.SchemaNamespace) { } } internal class DateDataContract : StringDataContract { internal DateDataContract() : base(DictionaryGlobals.dateLocalName, DictionaryGlobals.SchemaNamespace) { } } internal class HexBinaryDataContract : StringDataContract { internal HexBinaryDataContract() : base(DictionaryGlobals.hexBinaryLocalName, DictionaryGlobals.SchemaNamespace) { } } internal class GYearMonthDataContract : StringDataContract { internal GYearMonthDataContract() : base(DictionaryGlobals.gYearMonthLocalName, DictionaryGlobals.SchemaNamespace) { } } internal class GYearDataContract : StringDataContract { internal GYearDataContract() : base(DictionaryGlobals.gYearLocalName, DictionaryGlobals.SchemaNamespace) { } } internal class GMonthDayDataContract : StringDataContract { internal GMonthDayDataContract() : base(DictionaryGlobals.gMonthDayLocalName, DictionaryGlobals.SchemaNamespace) { } } internal class GDayDataContract : StringDataContract { internal GDayDataContract() : base(DictionaryGlobals.gDayLocalName, DictionaryGlobals.SchemaNamespace) { } } internal class GMonthDataContract : StringDataContract { internal GMonthDataContract() : base(DictionaryGlobals.gMonthLocalName, DictionaryGlobals.SchemaNamespace) { } } internal class NormalizedStringDataContract : StringDataContract { internal NormalizedStringDataContract() : base(DictionaryGlobals.normalizedStringLocalName, DictionaryGlobals.SchemaNamespace) { } } internal class TokenDataContract : StringDataContract { internal TokenDataContract() : base(DictionaryGlobals.tokenLocalName, DictionaryGlobals.SchemaNamespace) { } } internal class LanguageDataContract : StringDataContract { internal LanguageDataContract() : base(DictionaryGlobals.languageLocalName, DictionaryGlobals.SchemaNamespace) { } } internal class NameDataContract : StringDataContract { internal NameDataContract() : base(DictionaryGlobals.NameLocalName, DictionaryGlobals.SchemaNamespace) { } } internal class NCNameDataContract : StringDataContract { internal NCNameDataContract() : base(DictionaryGlobals.NCNameLocalName, DictionaryGlobals.SchemaNamespace) { } } internal class IDDataContract : StringDataContract { internal IDDataContract() : base(DictionaryGlobals.XSDIDLocalName, DictionaryGlobals.SchemaNamespace) { } } internal class IDREFDataContract : StringDataContract { internal IDREFDataContract() : base(DictionaryGlobals.IDREFLocalName, DictionaryGlobals.SchemaNamespace) { } } internal class IDREFSDataContract : StringDataContract { internal IDREFSDataContract() : base(DictionaryGlobals.IDREFSLocalName, DictionaryGlobals.SchemaNamespace) { } } internal class ENTITYDataContract : StringDataContract { internal ENTITYDataContract() : base(DictionaryGlobals.ENTITYLocalName, DictionaryGlobals.SchemaNamespace) { } } internal class ENTITIESDataContract : StringDataContract { internal ENTITIESDataContract() : base(DictionaryGlobals.ENTITIESLocalName, DictionaryGlobals.SchemaNamespace) { } } internal class NMTOKENDataContract : StringDataContract { internal NMTOKENDataContract() : base(DictionaryGlobals.NMTOKENLocalName, DictionaryGlobals.SchemaNamespace) { } } internal class NMTOKENSDataContract : StringDataContract { internal NMTOKENSDataContract() : base(DictionaryGlobals.NMTOKENSLocalName, DictionaryGlobals.SchemaNamespace) { } } internal class ByteArrayDataContract : PrimitiveDataContract { internal ByteArrayDataContract() : base(typeof(byte[]), DictionaryGlobals.ByteArrayLocalName, DictionaryGlobals.SchemaNamespace) { } internal override string WriteMethodName { get { return "WriteBase64"; } } internal override string ReadMethodName { get { return "ReadElementContentAsBase64"; } } public override void WriteXmlValue(XmlWriterDelegator writer, object obj, XmlObjectSerializerWriteContext context) { writer.WriteBase64((byte[])obj); } public override object ReadXmlValue(XmlReaderDelegator reader, XmlObjectSerializerReadContext context) { if (context == null) { return TryReadNullAtTopLevel(reader) ? null : reader.ReadElementContentAsBase64(); } else { return HandleReadValue(reader.ReadElementContentAsBase64(), context); } } } internal class ObjectDataContract : PrimitiveDataContract { internal ObjectDataContract() : base(typeof(object), DictionaryGlobals.ObjectLocalName, DictionaryGlobals.SchemaNamespace) { } internal override string WriteMethodName { get { return "WriteAnyType"; } } internal override string ReadMethodName { get { return "ReadElementContentAsAnyType"; } } public override void WriteXmlValue(XmlWriterDelegator writer, object obj, XmlObjectSerializerWriteContext context) { // write nothing } public override object ReadXmlValue(XmlReaderDelegator reader, XmlObjectSerializerReadContext context) { object obj; if (reader.IsEmptyElement) { reader.Skip(); obj = new object(); } else { string localName = reader.LocalName; string ns = reader.NamespaceURI; reader.Read(); try { reader.ReadEndElement(); obj = new object(); } catch (XmlException xes) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(XmlObjectSerializer.CreateSerializationException(SR.GetString(SR.XmlForObjectCannotHaveContent, localName, ns), xes)); } } return (context == null) ? obj : HandleReadValue(obj, context); } internal override bool CanContainReferences { get { return true; } } internal override bool IsPrimitive { get { return false; } } } internal class TimeSpanDataContract : PrimitiveDataContract { internal TimeSpanDataContract() : this(DictionaryGlobals.TimeSpanLocalName, DictionaryGlobals.SerializationNamespace) { } internal TimeSpanDataContract(XmlDictionaryString name, XmlDictionaryString ns) : base(typeof(TimeSpan), name, ns) { } internal override string WriteMethodName { get { return "WriteTimeSpan"; } } internal override string ReadMethodName { get { return "ReadElementContentAsTimeSpan"; } } public override void WriteXmlValue(XmlWriterDelegator writer, object obj, XmlObjectSerializerWriteContext context) { writer.WriteTimeSpan((TimeSpan)obj); } public override object ReadXmlValue(XmlReaderDelegator reader, XmlObjectSerializerReadContext context) { return (context == null) ? reader.ReadElementContentAsTimeSpan() : HandleReadValue(reader.ReadElementContentAsTimeSpan(), context); } } internal class XsDurationDataContract : TimeSpanDataContract { internal XsDurationDataContract() : base(DictionaryGlobals.TimeSpanLocalName, DictionaryGlobals.SchemaNamespace) { } } internal class GuidDataContract : PrimitiveDataContract { internal GuidDataContract() : this(DictionaryGlobals.GuidLocalName, DictionaryGlobals.SerializationNamespace) { } internal GuidDataContract(XmlDictionaryString name, XmlDictionaryString ns) : base(typeof(Guid), name, ns) { } internal override string WriteMethodName { get { return "WriteGuid"; } } internal override string ReadMethodName { get { return "ReadElementContentAsGuid"; } } public override void WriteXmlValue(XmlWriterDelegator writer, object obj, XmlObjectSerializerWriteContext context) { writer.WriteGuid((Guid)obj); } public override object ReadXmlValue(XmlReaderDelegator reader, XmlObjectSerializerReadContext context) { return (context == null) ? reader.ReadElementContentAsGuid() : HandleReadValue(reader.ReadElementContentAsGuid(), context); } } internal class AsmxGuidDataContract : GuidDataContract { internal AsmxGuidDataContract() : base(DictionaryGlobals.GuidLocalName, DictionaryGlobals.AsmxTypesNamespace) { } } internal class UriDataContract : PrimitiveDataContract { internal UriDataContract() : base(typeof(Uri), DictionaryGlobals.UriLocalName, DictionaryGlobals.SchemaNamespace) { } internal override string WriteMethodName { get { return "WriteUri"; } } internal override string ReadMethodName { get { return "ReadElementContentAsUri"; } } public override void WriteXmlValue(XmlWriterDelegator writer, object obj, XmlObjectSerializerWriteContext context) { writer.WriteUri((Uri)obj); } public override object ReadXmlValue(XmlReaderDelegator reader, XmlObjectSerializerReadContext context) { if (context == null) { return TryReadNullAtTopLevel(reader) ? null : reader.ReadElementContentAsUri(); } else { return HandleReadValue(reader.ReadElementContentAsUri(), context); } } } internal class QNameDataContract : PrimitiveDataContract { internal QNameDataContract() : base(typeof(XmlQualifiedName), DictionaryGlobals.QNameLocalName, DictionaryGlobals.SchemaNamespace) { } internal override string WriteMethodName { get { return "WriteQName"; } } internal override string ReadMethodName { get { return "ReadElementContentAsQName"; } } internal override bool IsPrimitive { get { return false; } } public override void WriteXmlValue(XmlWriterDelegator writer, object obj, XmlObjectSerializerWriteContext context) { writer.WriteQName((XmlQualifiedName)obj); } public override object ReadXmlValue(XmlReaderDelegator reader, XmlObjectSerializerReadContext context) { if (context == null) { return TryReadNullAtTopLevel(reader) ? null : reader.ReadElementContentAsQName(); } else { return HandleReadValue(reader.ReadElementContentAsQName(), context); } } internal override void WriteRootElement(XmlWriterDelegator writer, XmlDictionaryString name, XmlDictionaryString ns) { if (object.ReferenceEquals(ns, DictionaryGlobals.SerializationNamespace)) writer.WriteStartElement(Globals.SerPrefix, name, ns); else if (ns != null && ns.Value != null && ns.Value.Length > 0) writer.WriteStartElement(Globals.ElementPrefix, name, ns); else writer.WriteStartElement(name, ns); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- Relationship.cs
- Simplifier.cs
- Composition.cs
- FontCacheUtil.cs
- XsltSettings.cs
- IndependentAnimationStorage.cs
- TableCell.cs
- FrugalList.cs
- StreamSecurityUpgradeAcceptorAsyncResult.cs
- Freezable.cs
- DSACryptoServiceProvider.cs
- Panel.cs
- TaiwanCalendar.cs
- PreProcessor.cs
- PasswordTextContainer.cs
- WebBrowserProgressChangedEventHandler.cs
- SymLanguageType.cs
- SafeArrayRankMismatchException.cs
- ImmComposition.cs
- ActivityDesignerLayoutSerializers.cs
- PeerNeighborManager.cs
- SqlServices.cs
- KeyGesture.cs
- XMLSyntaxException.cs
- TextElementCollection.cs
- CommandDesigner.cs
- TraceSection.cs
- DataRowExtensions.cs
- StrongName.cs
- ReturnEventArgs.cs
- CodeDirectoryCompiler.cs
- ResizeGrip.cs
- RelationshipNavigation.cs
- WizardDesigner.cs
- InternalSafeNativeMethods.cs
- Expander.cs
- AffineTransform3D.cs
- Signature.cs
- FixedDocumentSequencePaginator.cs
- FixedSOMTableRow.cs
- HttpListenerContext.cs
- DefaultTypeArgumentAttribute.cs
- XPathAncestorQuery.cs
- AVElementHelper.cs
- ExpandSegmentCollection.cs
- DeclarativeCatalogPart.cs
- Vector3DValueSerializer.cs
- webclient.cs
- FrugalList.cs
- PersistencePipeline.cs
- DetailsViewDesigner.cs
- Matrix3DConverter.cs
- DataControlField.cs
- ProgressBarBrushConverter.cs
- CodeTypeConstructor.cs
- ClientProxyGenerator.cs
- FacetChecker.cs
- UnorderedHashRepartitionStream.cs
- GridItemProviderWrapper.cs
- ProfilePropertyNameValidator.cs
- InternalSafeNativeMethods.cs
- ParserExtension.cs
- ISAPIRuntime.cs
- SqlXml.cs
- ElementMarkupObject.cs
- VoiceInfo.cs
- Header.cs
- DbCommandTree.cs
- typedescriptorpermissionattribute.cs
- FixedPageStructure.cs
- AdapterDictionary.cs
- FtpWebRequest.cs
- MergablePropertyAttribute.cs
- XmlSchemaAll.cs
- MyContact.cs
- COM2EnumConverter.cs
- Transform3D.cs
- QilPatternFactory.cs
- WebExceptionStatus.cs
- LinkArea.cs
- JournalEntryListConverter.cs
- _SslState.cs
- DataTableClearEvent.cs
- ColorIndependentAnimationStorage.cs
- SqlSelectStatement.cs
- DataGridViewSelectedRowCollection.cs
- DataList.cs
- RadioButtonPopupAdapter.cs
- BitmapEffect.cs
- ExtractedStateEntry.cs
- SiteMembershipCondition.cs
- ErrorItem.cs
- LayoutSettings.cs
- ClientRuntimeConfig.cs
- EventWaitHandleSecurity.cs
- SystemTcpStatistics.cs
- SecureStringHasher.cs
- MessageEventSubscriptionService.cs
- LineBreakRecord.cs
- Cursor.cs