Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / Serialization / System / Runtime / Serialization / SurrogateDataContract.cs / 2 / SurrogateDataContract.cs
//------------------------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- namespace System.Runtime.Serialization { using System; using System.Reflection; using System.Xml; using DataContractDictionary=System.Collections.Generic.Dictionary; using System.Xml.Serialization; using System.Security; internal sealed class SurrogateDataContract : 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] SurrogateDataContractCriticalHelper helper; ////// Critical - initializes SecurityCritical field 'helper' /// Safe - doesn't leak anything /// [SecurityCritical, SecurityTreatAsSafe] internal SurrogateDataContract(Type type, ISerializationSurrogate serializationSurrogate) : base(new SurrogateDataContractCriticalHelper(type, serializationSurrogate)) { helper = base.Helper as SurrogateDataContractCriticalHelper; } internal ISerializationSurrogate SerializationSurrogate { ////// Critical - fetches the critical serializationSurrogate field /// Safe - serializationSurrogate only needs to be protected for write /// [SecurityCritical, SecurityTreatAsSafe] get { return helper.SerializationSurrogate; } } public override void WriteXmlValue(XmlWriterDelegator xmlWriter, object obj, XmlObjectSerializerWriteContext context) { SerializationInfo serInfo = new SerializationInfo(UnderlyingType, XmlObjectSerializer.FormatterConverter); SerializationSurrogate.GetObjectData(obj, serInfo, context.GetStreamingContext()); context.WriteSerializationInfo(xmlWriter, UnderlyingType, serInfo); } public override object ReadXmlValue(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContext context) { xmlReader.Read(); Type objType = UnderlyingType; object obj = objType.IsArray ? Array.CreateInstance(objType.GetElementType(), 0) : FormatterServices.GetUninitializedObject(objType); context.AddNewObject(obj); string objectId = context.GetObjectId(); SerializationInfo serInfo = context.ReadSerializationInfo(xmlReader, objType); object newObj = SerializationSurrogate.SetObjectData(obj, serInfo, context.GetStreamingContext(), null); if (newObj == null) newObj = obj; if (newObj is IDeserializationCallback) ((IDeserializationCallback)newObj).OnDeserialization(null); if (newObj is IObjectReference) newObj = ((IObjectReference)newObj).GetRealObject(context.GetStreamingContext()); context.ReplaceDeserializedObject(objectId, obj, newObj); xmlReader.ReadEndElement(); return newObj; } ////// Critical - holds all state used for for (de)serializing with ISerializationSurrogate. /// since it accesses data on the base type that is cached statically, we lock down access to it. /// [SecurityCritical(SecurityCriticalScope.Everything)] class SurrogateDataContractCriticalHelper : DataContract.DataContractCriticalHelper { ISerializationSurrogate serializationSurrogate; internal SurrogateDataContractCriticalHelper(Type type, ISerializationSurrogate serializationSurrogate) : base(type) { this.serializationSurrogate = serializationSurrogate; string name, ns; DataContract.GetDefaultStableName(DataContract.GetClrTypeFullName(type), out name, out ns); SetDataContractName(CreateQualifiedName(name, ns)); } internal ISerializationSurrogate SerializationSurrogate { get { return serializationSurrogate; } } } } } // 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
- ComNativeDescriptor.cs
- XsltLibrary.cs
- ReliableChannelListener.cs
- DataGridTextColumn.cs
- MsmqIntegrationValidationBehavior.cs
- AsymmetricKeyExchangeFormatter.cs
- AtomParser.cs
- PageBorderless.cs
- CalculatedColumn.cs
- DataGridViewSelectedCellCollection.cs
- MediaContext.cs
- CompilerParameters.cs
- SnapLine.cs
- Serializer.cs
- SchemaElement.cs
- EntitySqlQueryBuilder.cs
- ResolveCompletedEventArgs.cs
- EntityDataSourceWrapperCollection.cs
- TextDecorationCollectionConverter.cs
- InheritedPropertyChangedEventArgs.cs
- PlanCompilerUtil.cs
- DataGridViewRowPostPaintEventArgs.cs
- ConfigXmlComment.cs
- InternalMappingException.cs
- ResourceExpressionEditorSheet.cs
- SafeUserTokenHandle.cs
- TextParaLineResult.cs
- TemplateKey.cs
- DetailsViewRowCollection.cs
- WebPartMinimizeVerb.cs
- BaseValidator.cs
- TraceRecord.cs
- SecurityTokenParametersEnumerable.cs
- TypeGeneratedEventArgs.cs
- BitmapSourceSafeMILHandle.cs
- HealthMonitoringSection.cs
- Boolean.cs
- SoapCodeExporter.cs
- DataKey.cs
- DesignerVerb.cs
- TypeExtensionConverter.cs
- Asn1IntegerConverter.cs
- ReachDocumentReferenceSerializerAsync.cs
- RuntimeResourceSet.cs
- QueueSurrogate.cs
- Animatable.cs
- PaperSource.cs
- TaiwanLunisolarCalendar.cs
- SelectorItemAutomationPeer.cs
- XmlWriterTraceListener.cs
- TemplateApplicationHelper.cs
- RNGCryptoServiceProvider.cs
- X509CertificateCollection.cs
- SequentialUshortCollection.cs
- WarningException.cs
- EntityCommand.cs
- SqlCacheDependencyDatabaseCollection.cs
- XPathBuilder.cs
- dbdatarecord.cs
- IImplicitResourceProvider.cs
- InputLanguageCollection.cs
- XmlSchemaInclude.cs
- ApplyHostConfigurationBehavior.cs
- XmlObjectSerializer.cs
- LinqExpressionNormalizer.cs
- XPathEmptyIterator.cs
- ProcessInfo.cs
- ViewgenContext.cs
- XmlSchemaSimpleContent.cs
- UpdatePanelControlTrigger.cs
- CellRelation.cs
- BufferedStream2.cs
- TextElement.cs
- SqlCharStream.cs
- SqlDataSourceFilteringEventArgs.cs
- PathSegment.cs
- DependentTransaction.cs
- XmlSchemaAll.cs
- ManagedCodeMarkers.cs
- DataGridViewButtonColumn.cs
- ISSmlParser.cs
- FactoryGenerator.cs
- IgnoreDataMemberAttribute.cs
- XamlReader.cs
- CodeNamespaceImport.cs
- OnOperation.cs
- RegexGroup.cs
- SiteOfOriginContainer.cs
- NavigateUrlConverter.cs
- ListenerSessionConnection.cs
- CompositionAdorner.cs
- Rule.cs
- UpDownEvent.cs
- SurrogateChar.cs
- WebServiceResponseDesigner.cs
- Converter.cs
- TextEffectCollection.cs
- ReadOnlyDataSource.cs
- _HTTPDateParse.cs
- QilReplaceVisitor.cs