Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / WCF / Serialization / System / Runtime / Serialization / SurrogateDataContract.cs / 1305376 / SurrogateDataContract.cs
//------------------------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- namespace System.Runtime.Serialization { using System; using System.Security; using System.Security.Permissions; using System.Runtime.CompilerServices; #if USE_REFEMIT public sealed class SurrogateDataContract : DataContract #else internal sealed class SurrogateDataContract : DataContract #endif { [Fx.Tag.SecurityNote(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; [Fx.Tag.SecurityNote(Critical = "Initializes SecurityCritical field 'helper'.", Safe = "Doesn't leak anything.")] [SecuritySafeCritical] internal SurrogateDataContract(Type type, ISerializationSurrogate serializationSurrogate) : base(new SurrogateDataContractCriticalHelper(type, serializationSurrogate)) { helper = base.Helper as SurrogateDataContractCriticalHelper; } internal ISerializationSurrogate SerializationSurrogate { [Fx.Tag.SecurityNote(Critical = "Fetches the critical serializationSurrogate property.", Safe = "serializationSurrogate only needs to be protected for write.")] [SecuritySafeCritical] get { return helper.SerializationSurrogate; } } public override void WriteXmlValue(XmlWriterDelegator xmlWriter, object obj, XmlObjectSerializerWriteContext context) { SerializationInfo serInfo = new SerializationInfo(UnderlyingType, XmlObjectSerializer.FormatterConverter); SerializationSurrogateGetObjectData(obj, serInfo, context.GetStreamingContext()); context.WriteSerializationInfo(xmlWriter, UnderlyingType, serInfo); } [Fx.Tag.SecurityNote(Critical = "Calls the critical methods of ISurrogateSelector", Safe = "Demands for FullTrust")] [SecuritySafeCritical] [PermissionSet(SecurityAction.Demand, Name = "FullTrust")] [MethodImpl(MethodImplOptions.NoInlining)] object SerializationSurrogateSetObjectData(object obj, SerializationInfo serInfo, StreamingContext context) { return SerializationSurrogate.SetObjectData(obj, serInfo, context, null); } [Fx.Tag.SecurityNote(Critical = "Calls the critical methods of IObjectReference", Safe = "Demands for FullTrust")] [SecuritySafeCritical] [PermissionSet(SecurityAction.Demand, Name = "FullTrust")] [MethodImpl(MethodImplOptions.NoInlining)] internal static object GetRealObject(IObjectReference obj, StreamingContext context) { return obj.GetRealObject(context); } [Fx.Tag.SecurityNote(Critical = "Calls the critical methods of FormatterServices", Safe = "Demands for FullTrust")] [SecuritySafeCritical] [PermissionSet(SecurityAction.Demand, Name = "FullTrust")] [MethodImpl(MethodImplOptions.NoInlining)] object GetUninitializedObject(Type objType) { return FormatterServices.GetUninitializedObject(objType); } [Fx.Tag.SecurityNote(Critical = "Calls the critical methods of ISerializationSurrogate", Safe = "Demands for FullTrust")] [SecuritySafeCritical] [PermissionSet(SecurityAction.Demand, Name = "FullTrust")] [MethodImpl(MethodImplOptions.NoInlining)] void SerializationSurrogateGetObjectData(object obj, SerializationInfo serInfo, StreamingContext context) { SerializationSurrogate.GetObjectData(obj, serInfo, context); } public override object ReadXmlValue(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContext context) { xmlReader.Read(); Type objType = UnderlyingType; object obj = objType.IsArray ? Array.CreateInstance(objType.GetElementType(), 0) : GetUninitializedObject(objType); context.AddNewObject(obj); string objectId = context.GetObjectId(); SerializationInfo serInfo = context.ReadSerializationInfo(xmlReader, objType); object newObj = SerializationSurrogateSetObjectData(obj, serInfo, context.GetStreamingContext()); if (newObj == null) newObj = obj; if (newObj is IDeserializationCallback) ((IDeserializationCallback)newObj).OnDeserialization(null); if (newObj is IObjectReference) newObj = GetRealObject((IObjectReference)newObj, context.GetStreamingContext()); context.ReplaceDeserializedObject(objectId, obj, newObj); xmlReader.ReadEndElement(); return newObj; } [Fx.Tag.SecurityNote(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. //----------------------------------------------------------------------------- namespace System.Runtime.Serialization { using System; using System.Security; using System.Security.Permissions; using System.Runtime.CompilerServices; #if USE_REFEMIT public sealed class SurrogateDataContract : DataContract #else internal sealed class SurrogateDataContract : DataContract #endif { [Fx.Tag.SecurityNote(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; [Fx.Tag.SecurityNote(Critical = "Initializes SecurityCritical field 'helper'.", Safe = "Doesn't leak anything.")] [SecuritySafeCritical] internal SurrogateDataContract(Type type, ISerializationSurrogate serializationSurrogate) : base(new SurrogateDataContractCriticalHelper(type, serializationSurrogate)) { helper = base.Helper as SurrogateDataContractCriticalHelper; } internal ISerializationSurrogate SerializationSurrogate { [Fx.Tag.SecurityNote(Critical = "Fetches the critical serializationSurrogate property.", Safe = "serializationSurrogate only needs to be protected for write.")] [SecuritySafeCritical] get { return helper.SerializationSurrogate; } } public override void WriteXmlValue(XmlWriterDelegator xmlWriter, object obj, XmlObjectSerializerWriteContext context) { SerializationInfo serInfo = new SerializationInfo(UnderlyingType, XmlObjectSerializer.FormatterConverter); SerializationSurrogateGetObjectData(obj, serInfo, context.GetStreamingContext()); context.WriteSerializationInfo(xmlWriter, UnderlyingType, serInfo); } [Fx.Tag.SecurityNote(Critical = "Calls the critical methods of ISurrogateSelector", Safe = "Demands for FullTrust")] [SecuritySafeCritical] [PermissionSet(SecurityAction.Demand, Name = "FullTrust")] [MethodImpl(MethodImplOptions.NoInlining)] object SerializationSurrogateSetObjectData(object obj, SerializationInfo serInfo, StreamingContext context) { return SerializationSurrogate.SetObjectData(obj, serInfo, context, null); } [Fx.Tag.SecurityNote(Critical = "Calls the critical methods of IObjectReference", Safe = "Demands for FullTrust")] [SecuritySafeCritical] [PermissionSet(SecurityAction.Demand, Name = "FullTrust")] [MethodImpl(MethodImplOptions.NoInlining)] internal static object GetRealObject(IObjectReference obj, StreamingContext context) { return obj.GetRealObject(context); } [Fx.Tag.SecurityNote(Critical = "Calls the critical methods of FormatterServices", Safe = "Demands for FullTrust")] [SecuritySafeCritical] [PermissionSet(SecurityAction.Demand, Name = "FullTrust")] [MethodImpl(MethodImplOptions.NoInlining)] object GetUninitializedObject(Type objType) { return FormatterServices.GetUninitializedObject(objType); } [Fx.Tag.SecurityNote(Critical = "Calls the critical methods of ISerializationSurrogate", Safe = "Demands for FullTrust")] [SecuritySafeCritical] [PermissionSet(SecurityAction.Demand, Name = "FullTrust")] [MethodImpl(MethodImplOptions.NoInlining)] void SerializationSurrogateGetObjectData(object obj, SerializationInfo serInfo, StreamingContext context) { SerializationSurrogate.GetObjectData(obj, serInfo, context); } public override object ReadXmlValue(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContext context) { xmlReader.Read(); Type objType = UnderlyingType; object obj = objType.IsArray ? Array.CreateInstance(objType.GetElementType(), 0) : GetUninitializedObject(objType); context.AddNewObject(obj); string objectId = context.GetObjectId(); SerializationInfo serInfo = context.ReadSerializationInfo(xmlReader, objType); object newObj = SerializationSurrogateSetObjectData(obj, serInfo, context.GetStreamingContext()); if (newObj == null) newObj = obj; if (newObj is IDeserializationCallback) ((IDeserializationCallback)newObj).OnDeserialization(null); if (newObj is IObjectReference) newObj = GetRealObject((IObjectReference)newObj, context.GetStreamingContext()); context.ReplaceDeserializedObject(objectId, obj, newObj); xmlReader.ReadEndElement(); return newObj; } [Fx.Tag.SecurityNote(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.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- Tuple.cs
- SynchronousChannel.cs
- MultiSelector.cs
- SpeechRecognitionEngine.cs
- SelectedDatesCollection.cs
- ClientProxyGenerator.cs
- MaskDescriptors.cs
- InputMethodStateChangeEventArgs.cs
- TimeSpanConverter.cs
- SatelliteContractVersionAttribute.cs
- RelatedImageListAttribute.cs
- NavigateEvent.cs
- DataSourceExpression.cs
- Scene3D.cs
- GridViewColumnCollection.cs
- QilCloneVisitor.cs
- SqlCacheDependency.cs
- ClientTargetCollection.cs
- JournalEntry.cs
- DataServiceProviderMethods.cs
- SecurityHeaderElementInferenceEngine.cs
- XamlReaderHelper.cs
- InProcStateClientManager.cs
- MatrixAnimationUsingPath.cs
- RemoteWebConfigurationHost.cs
- FlowDocumentView.cs
- LocatorBase.cs
- Native.cs
- Pair.cs
- PictureBox.cs
- serverconfig.cs
- X509Certificate2Collection.cs
- HeaderUtility.cs
- ValueUtilsSmi.cs
- DiscoveryDocument.cs
- VariableAction.cs
- AutomationPatternInfo.cs
- StateManagedCollection.cs
- XmlSchemaInferenceException.cs
- DeclarationUpdate.cs
- CrossSiteScriptingValidation.cs
- WizardPanelChangingEventArgs.cs
- PackageDigitalSignature.cs
- ProcessInfo.cs
- EncoderExceptionFallback.cs
- BitmapMetadataEnumerator.cs
- WebBrowserUriTypeConverter.cs
- SchemaInfo.cs
- FileDataSourceCache.cs
- RegexWorker.cs
- PropertyTabChangedEvent.cs
- JsonReader.cs
- StateMachine.cs
- SoapRpcServiceAttribute.cs
- ListControlConvertEventArgs.cs
- Int32.cs
- ProfileSettingsCollection.cs
- SchemaMerger.cs
- CallId.cs
- ClosableStream.cs
- versioninfo.cs
- DelegateTypeInfo.cs
- EntityDataSourceState.cs
- DataGridViewRowPrePaintEventArgs.cs
- ScrollPattern.cs
- MSAANativeProvider.cs
- RoleBoolean.cs
- ToolStripHighContrastRenderer.cs
- __FastResourceComparer.cs
- StatusBarDrawItemEvent.cs
- lengthconverter.cs
- OleDbInfoMessageEvent.cs
- PageFunction.cs
- Error.cs
- XPathSelfQuery.cs
- ProxyGenerationError.cs
- XmlSchemaNotation.cs
- ConsoleTraceListener.cs
- ConfigXmlText.cs
- DataGridViewToolTip.cs
- RemotingException.cs
- PersonalizationStateQuery.cs
- CrossAppDomainChannel.cs
- Missing.cs
- Rotation3D.cs
- ListViewAutomationPeer.cs
- ListItemParagraph.cs
- FederatedMessageSecurityOverHttp.cs
- WhitespaceRuleReader.cs
- ObjectFactoryCodeDomTreeGenerator.cs
- TransformProviderWrapper.cs
- X509SecurityTokenProvider.cs
- TextEncodedRawTextWriter.cs
- DefaultValueTypeConverter.cs
- Button.cs
- Helper.cs
- CollectionViewSource.cs
- DataGridViewComboBoxEditingControl.cs
- UserControlCodeDomTreeGenerator.cs
- XmlSchemaSimpleContentRestriction.cs