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
- XmlSchemaAttributeGroup.cs
- BrushProxy.cs
- CompilerState.cs
- AutoResizedEvent.cs
- HttpProxyTransportBindingElement.cs
- InfoCardHelper.cs
- sortedlist.cs
- HtmlSelect.cs
- Faults.cs
- PassportAuthenticationEventArgs.cs
- ArrangedElementCollection.cs
- FlowDocumentPaginator.cs
- TextReader.cs
- Error.cs
- DefaultAuthorizationContext.cs
- StrokeIntersection.cs
- ImageButton.cs
- MachinePropertyVariants.cs
- StackSpiller.Bindings.cs
- XmlSchemaSubstitutionGroup.cs
- PagesSection.cs
- UInt64Converter.cs
- ProxyWebPartManager.cs
- HtmlTableRowCollection.cs
- UrlMapping.cs
- SecurityPolicyVersion.cs
- HandleExceptionArgs.cs
- CallTemplateAction.cs
- JsonQNameDataContract.cs
- TextProperties.cs
- StylusEditingBehavior.cs
- PrintControllerWithStatusDialog.cs
- EnumerableRowCollectionExtensions.cs
- LogAppendAsyncResult.cs
- StyleTypedPropertyAttribute.cs
- ContainerUtilities.cs
- NativeMethods.cs
- ZipArchive.cs
- PersistenceIOParticipant.cs
- UdpConstants.cs
- AssemblyResourceLoader.cs
- CryptoConfig.cs
- EntityDataReader.cs
- Aggregates.cs
- MostlySingletonList.cs
- IRCollection.cs
- XmlSchemaGroupRef.cs
- WebServiceErrorEvent.cs
- DigestTraceRecordHelper.cs
- UserPreferenceChangedEventArgs.cs
- TransformerInfoCollection.cs
- CollectionViewGroupInternal.cs
- QuaternionAnimationBase.cs
- NumberFunctions.cs
- SoapSchemaExporter.cs
- DragDrop.cs
- SamlAudienceRestrictionCondition.cs
- SafeBitVector32.cs
- PopOutPanel.cs
- XmlSchemaDocumentation.cs
- SortedList.cs
- SQLMoney.cs
- SystemKeyConverter.cs
- CaseStatementSlot.cs
- BCLDebug.cs
- WebPartMinimizeVerb.cs
- ZoneIdentityPermission.cs
- SystemIPInterfaceProperties.cs
- COAUTHINFO.cs
- DynamicValueConverter.cs
- DesignTableCollection.cs
- PropertyEmitter.cs
- PointCollection.cs
- OrderedDictionaryStateHelper.cs
- LineServicesCallbacks.cs
- FullTextBreakpoint.cs
- IIS7UserPrincipal.cs
- AnnotationResourceChangedEventArgs.cs
- SqlServices.cs
- ThemeConfigurationDialog.cs
- UriSection.cs
- Parameter.cs
- RSACryptoServiceProvider.cs
- IPCCacheManager.cs
- TreeWalkHelper.cs
- ReferencedCategoriesDocument.cs
- ArrayMergeHelper.cs
- Section.cs
- IsolatedStoragePermission.cs
- AttributeUsageAttribute.cs
- Model3DGroup.cs
- SchemaImporterExtensionElement.cs
- glyphs.cs
- WebServiceFaultDesigner.cs
- WebPartExportVerb.cs
- VariantWrapper.cs
- LineUtil.cs
- WebPartCatalogCloseVerb.cs
- XmlValidatingReaderImpl.cs
- UICuesEvent.cs