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
- DelegatedStream.cs
- EnumerableRowCollectionExtensions.cs
- XmlDomTextWriter.cs
- VisualBasicDesignerHelper.cs
- ConstraintStruct.cs
- _ProxyChain.cs
- HorizontalAlignConverter.cs
- CatalogPartChrome.cs
- CheckBoxAutomationPeer.cs
- RestHandlerFactory.cs
- FixedSOMTableRow.cs
- HandlerElementCollection.cs
- TextElement.cs
- StaticContext.cs
- StrokeFIndices.cs
- CultureInfo.cs
- DataTableTypeConverter.cs
- CqlBlock.cs
- GlyphCache.cs
- DefaultParameterValueAttribute.cs
- PolyQuadraticBezierSegment.cs
- XmlArrayItemAttribute.cs
- XmlParser.cs
- SiteMapNodeItemEventArgs.cs
- ISAPIWorkerRequest.cs
- Collection.cs
- Action.cs
- ParagraphResult.cs
- HtmlFormParameterReader.cs
- PersistChildrenAttribute.cs
- PropertyPathConverter.cs
- Debugger.cs
- DbConnectionClosed.cs
- Literal.cs
- DirtyTextRange.cs
- OracleConnectionString.cs
- _DomainName.cs
- BaseCollection.cs
- DispatcherHookEventArgs.cs
- ModelVisual3D.cs
- DrawingDrawingContext.cs
- ConfigXmlSignificantWhitespace.cs
- HandleValueEditor.cs
- CodeAttributeDeclarationCollection.cs
- PixelShader.cs
- SharingService.cs
- DataSourceCache.cs
- InplaceBitmapMetadataWriter.cs
- TraceLog.cs
- DesignDataSource.cs
- OleCmdHelper.cs
- DefaultAuthorizationContext.cs
- FragmentQueryKB.cs
- Mutex.cs
- ImageClickEventArgs.cs
- Keywords.cs
- Padding.cs
- XmlSerializationGeneratedCode.cs
- GetWinFXPath.cs
- EdgeModeValidation.cs
- GenerateHelper.cs
- WindowsListViewGroupHelper.cs
- XPathChildIterator.cs
- Registration.cs
- ErrorTableItemStyle.cs
- BoundField.cs
- BooleanFacetDescriptionElement.cs
- CustomAttribute.cs
- TypeSystem.cs
- TypeForwardedToAttribute.cs
- SemaphoreFullException.cs
- DataControlFieldCollection.cs
- VSDExceptions.cs
- ObjectDataSourceView.cs
- RSAOAEPKeyExchangeDeformatter.cs
- CompilerGeneratedAttribute.cs
- Encoding.cs
- ImageIndexConverter.cs
- SendMessageContent.cs
- OdbcHandle.cs
- PtsContext.cs
- CellTreeNodeVisitors.cs
- ObjectPropertyMapping.cs
- AsyncPostBackTrigger.cs
- SaveFileDialogDesigner.cs
- TextTreeUndo.cs
- HttpVersion.cs
- PeerFlooder.cs
- CollectionCodeDomSerializer.cs
- WindowsFormsHelpers.cs
- Size3D.cs
- ResourceProviderFactory.cs
- _AutoWebProxyScriptWrapper.cs
- UnsafeNativeMethods.cs
- BitStream.cs
- DependencyProperty.cs
- XPathNavigatorReader.cs
- BinaryKeyIdentifierClause.cs
- BindingExpressionUncommonField.cs
- DelegatedStream.cs