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
- ExecutionPropertyManager.cs
- StringExpressionSet.cs
- WebBrowserPermission.cs
- WmlFormAdapter.cs
- DbMetaDataFactory.cs
- HyperlinkAutomationPeer.cs
- EntitySqlException.cs
- SizeFConverter.cs
- DataGridRowAutomationPeer.cs
- Animatable.cs
- DefaultMergeHelper.cs
- MimeParameter.cs
- ResourceDictionaryCollection.cs
- PropVariant.cs
- ScriptModule.cs
- HandledMouseEvent.cs
- ClickablePoint.cs
- IndexerNameAttribute.cs
- BitmapEffectGroup.cs
- PageEventArgs.cs
- HttpWrapper.cs
- VirtualPathUtility.cs
- storagemappingitemcollection.viewdictionary.cs
- SelectedDatesCollection.cs
- complextypematerializer.cs
- Int32.cs
- CustomTypeDescriptor.cs
- DataGridViewSelectedRowCollection.cs
- BitmapEncoder.cs
- StringSource.cs
- SmtpNtlmAuthenticationModule.cs
- HttpAsyncResult.cs
- X509Utils.cs
- SmiTypedGetterSetter.cs
- Expressions.cs
- KerberosSecurityTokenAuthenticator.cs
- PathParser.cs
- XmlWrappingReader.cs
- DbReferenceCollection.cs
- EdgeModeValidation.cs
- ReliableRequestSessionChannel.cs
- ControlBuilderAttribute.cs
- AssemblyNameProxy.cs
- DesignBinding.cs
- ImageConverter.cs
- FlowLayout.cs
- GlyphTypeface.cs
- DataObjectCopyingEventArgs.cs
- ColorAnimationBase.cs
- RIPEMD160Managed.cs
- MetadataPropertyCollection.cs
- ColumnReorderedEventArgs.cs
- VisualBrush.cs
- DeploymentSectionCache.cs
- ThicknessAnimationBase.cs
- Literal.cs
- NamespaceEmitter.cs
- HttpVersion.cs
- NumberSubstitution.cs
- MarkupCompilePass1.cs
- SqlDataSourceWizardForm.cs
- GuidelineCollection.cs
- ShaderEffect.cs
- TypeDelegator.cs
- ReadOnlyCollectionBase.cs
- PersonalizableTypeEntry.cs
- FontUnitConverter.cs
- TrackingStringDictionary.cs
- FileChangesMonitor.cs
- CopyNamespacesAction.cs
- CmsInterop.cs
- SafeFileMappingHandle.cs
- HideDisabledControlAdapter.cs
- PhysicalOps.cs
- ToolStripDropDownItem.cs
- CryptoHandle.cs
- UpdateTracker.cs
- SchemaElementLookUpTableEnumerator.cs
- TypeElementCollection.cs
- MethodCallTranslator.cs
- SecureConversationVersion.cs
- KeyTime.cs
- XmlSchemaInfo.cs
- ColumnHeader.cs
- Completion.cs
- TabControl.cs
- HttpDictionary.cs
- ScaleTransform3D.cs
- Confirm.cs
- mansign.cs
- DiscoveryRequestHandler.cs
- TextPointer.cs
- Vector3DValueSerializer.cs
- XmlReader.cs
- SmtpFailedRecipientException.cs
- Transform3D.cs
- ParseHttpDate.cs
- HtmlInputSubmit.cs
- BaseProcessProtocolHandler.cs
- PersistenceException.cs