Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / ndp / clr / src / BCL / System / Runtime / Serialization / Formatters / Binary / BinaryFormatter.cs / 1 / BinaryFormatter.cs
// ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== /*============================================================ ** ** Class: BinaryFormatter ** ** ** Purpose: Soap XML Formatter ** ** ===========================================================*/ namespace System.Runtime.Serialization.Formatters.Binary { using System; using System.IO; using System.Reflection; using System.Globalization; using System.Collections; using System.Runtime.Serialization.Formatters; using System.Runtime.Remoting; using System.Runtime.Remoting.Proxies; using System.Runtime.Remoting.Messaging; using System.Runtime.Serialization; using System.Security.Permissions; [System.Runtime.InteropServices.ComVisible(true)] sealed public class BinaryFormatter : IRemotingFormatter { internal ISurrogateSelector m_surrogates; internal StreamingContext m_context; internal SerializationBinder m_binder; //internal FormatterTypeStyle m_typeFormat = FormatterTypeStyle.TypesWhenNeeded; internal FormatterTypeStyle m_typeFormat = FormatterTypeStyle.TypesAlways; // For version resiliency, always put out types internal FormatterAssemblyStyle m_assemblyFormat = FormatterAssemblyStyle.Simple; internal TypeFilterLevel m_securityLevel = TypeFilterLevel.Full; internal Object[] m_crossAppDomainArray = null; // Property which specifies how types are serialized, // FormatterTypeStyle Enum specifies options public FormatterTypeStyle TypeFormat { get {return m_typeFormat;} set {m_typeFormat = value;} } // Property which specifies how types are serialized, // FormatterAssemblyStyle Enum specifies options public FormatterAssemblyStyle AssemblyFormat { get {return m_assemblyFormat;} set {m_assemblyFormat = value;} } // Property which specifies the security level of formatter // TypeFilterLevel Enum specifies options public TypeFilterLevel FilterLevel { get {return m_securityLevel;} set {m_securityLevel = value;} } public ISurrogateSelector SurrogateSelector { get { return m_surrogates;} set { m_surrogates = value;} } public SerializationBinder Binder { get { return m_binder;} set { m_binder = value;} } public StreamingContext Context { get { return m_context;} set { m_context = value;} } // Constructor public BinaryFormatter() { m_surrogates = null; m_context = new StreamingContext(StreamingContextStates.All); } // Constructor public BinaryFormatter(ISurrogateSelector selector, StreamingContext context) { m_surrogates = selector; m_context = context; } // Deserialize the stream into an object graph. public Object Deserialize(Stream serializationStream) { return Deserialize(serializationStream, null); } internal Object Deserialize(Stream serializationStream, HeaderHandler handler, bool fCheck) { return Deserialize(serializationStream, null, fCheck, null); } // Deserialize the stream into an object graph. public Object Deserialize(Stream serializationStream, HeaderHandler handler) { return Deserialize(serializationStream, handler, true, null); } public Object DeserializeMethodResponse(Stream serializationStream, HeaderHandler handler, IMethodCallMessage methodCallMessage) { return Deserialize(serializationStream, handler, true, methodCallMessage); } [ SecurityPermissionAttribute(SecurityAction.LinkDemand, Flags=SecurityPermissionFlag.SerializationFormatter), System.Runtime.InteropServices.ComVisible(false) ] public Object UnsafeDeserialize(Stream serializationStream, HeaderHandler handler) { return Deserialize(serializationStream, handler, false, null); } [ SecurityPermissionAttribute(SecurityAction.LinkDemand, Flags=SecurityPermissionFlag.SerializationFormatter), System.Runtime.InteropServices.ComVisible(false) ] public Object UnsafeDeserializeMethodResponse(Stream serializationStream, HeaderHandler handler, IMethodCallMessage methodCallMessage) { return Deserialize(serializationStream, handler, false, methodCallMessage); } internal Object Deserialize(Stream serializationStream, HeaderHandler handler, bool fCheck, IMethodCallMessage methodCallMessage) { return Deserialize(serializationStream, handler, fCheck, false/*isCrossAppDomain*/, methodCallMessage); } // Deserialize the stream into an object graph. internal Object Deserialize(Stream serializationStream, HeaderHandler handler, bool fCheck, bool isCrossAppDomain, IMethodCallMessage methodCallMessage) { if (serializationStream==null) { throw new ArgumentNullException("serializationStream", String.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("ArgumentNull_WithParamName"),serializationStream)); } if (serializationStream.CanSeek && (serializationStream.Length == 0)) throw new SerializationException(Environment.GetResourceString("Serialization_Stream")); SerTrace.Log(this, "Deserialize Entry"); InternalFE formatterEnums = new InternalFE(); formatterEnums.FEtypeFormat = m_typeFormat; formatterEnums.FEserializerTypeEnum = InternalSerializerTypeE.Binary; formatterEnums.FEassemblyFormat = m_assemblyFormat; formatterEnums.FEsecurityLevel = m_securityLevel; ObjectReader sor = new ObjectReader(serializationStream, m_surrogates, m_context, formatterEnums, m_binder); sor.crossAppDomainArray = m_crossAppDomainArray; return sor.Deserialize(handler, new __BinaryParser(serializationStream, sor), fCheck, isCrossAppDomain, methodCallMessage); } public void Serialize(Stream serializationStream,Object graph) { Serialize(serializationStream, graph, null); } // Commences the process of serializing the entire graph. All of the data (in the appropriate format // is emitted onto the stream). public void Serialize(Stream serializationStream, Object graph, Header[] headers) { Serialize(serializationStream, graph, headers, true); } // Commences the process of serializing the entire graph. All of the data (in the appropriate format // is emitted onto the stream). internal void Serialize(Stream serializationStream, Object graph, Header[] headers, bool fCheck) { if (serializationStream==null) { throw new ArgumentNullException("serializationStream", String.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("ArgumentNull_WithParamName"),serializationStream)); } SerTrace.Log(this, "Serialize Entry"); InternalFE formatterEnums = new InternalFE(); formatterEnums.FEtypeFormat = m_typeFormat; formatterEnums.FEserializerTypeEnum = InternalSerializerTypeE.Binary; formatterEnums.FEassemblyFormat = m_assemblyFormat; ObjectWriter sow = new ObjectWriter(m_surrogates, m_context, formatterEnums); __BinaryWriter binaryWriter = new __BinaryWriter(serializationStream, sow, m_typeFormat); sow.Serialize(graph, headers, binaryWriter, fCheck); m_crossAppDomainArray = sow.crossAppDomainArray; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== /*============================================================ ** ** Class: BinaryFormatter ** ** ** Purpose: Soap XML Formatter ** ** ===========================================================*/ namespace System.Runtime.Serialization.Formatters.Binary { using System; using System.IO; using System.Reflection; using System.Globalization; using System.Collections; using System.Runtime.Serialization.Formatters; using System.Runtime.Remoting; using System.Runtime.Remoting.Proxies; using System.Runtime.Remoting.Messaging; using System.Runtime.Serialization; using System.Security.Permissions; [System.Runtime.InteropServices.ComVisible(true)] sealed public class BinaryFormatter : IRemotingFormatter { internal ISurrogateSelector m_surrogates; internal StreamingContext m_context; internal SerializationBinder m_binder; //internal FormatterTypeStyle m_typeFormat = FormatterTypeStyle.TypesWhenNeeded; internal FormatterTypeStyle m_typeFormat = FormatterTypeStyle.TypesAlways; // For version resiliency, always put out types internal FormatterAssemblyStyle m_assemblyFormat = FormatterAssemblyStyle.Simple; internal TypeFilterLevel m_securityLevel = TypeFilterLevel.Full; internal Object[] m_crossAppDomainArray = null; // Property which specifies how types are serialized, // FormatterTypeStyle Enum specifies options public FormatterTypeStyle TypeFormat { get {return m_typeFormat;} set {m_typeFormat = value;} } // Property which specifies how types are serialized, // FormatterAssemblyStyle Enum specifies options public FormatterAssemblyStyle AssemblyFormat { get {return m_assemblyFormat;} set {m_assemblyFormat = value;} } // Property which specifies the security level of formatter // TypeFilterLevel Enum specifies options public TypeFilterLevel FilterLevel { get {return m_securityLevel;} set {m_securityLevel = value;} } public ISurrogateSelector SurrogateSelector { get { return m_surrogates;} set { m_surrogates = value;} } public SerializationBinder Binder { get { return m_binder;} set { m_binder = value;} } public StreamingContext Context { get { return m_context;} set { m_context = value;} } // Constructor public BinaryFormatter() { m_surrogates = null; m_context = new StreamingContext(StreamingContextStates.All); } // Constructor public BinaryFormatter(ISurrogateSelector selector, StreamingContext context) { m_surrogates = selector; m_context = context; } // Deserialize the stream into an object graph. public Object Deserialize(Stream serializationStream) { return Deserialize(serializationStream, null); } internal Object Deserialize(Stream serializationStream, HeaderHandler handler, bool fCheck) { return Deserialize(serializationStream, null, fCheck, null); } // Deserialize the stream into an object graph. public Object Deserialize(Stream serializationStream, HeaderHandler handler) { return Deserialize(serializationStream, handler, true, null); } public Object DeserializeMethodResponse(Stream serializationStream, HeaderHandler handler, IMethodCallMessage methodCallMessage) { return Deserialize(serializationStream, handler, true, methodCallMessage); } [ SecurityPermissionAttribute(SecurityAction.LinkDemand, Flags=SecurityPermissionFlag.SerializationFormatter), System.Runtime.InteropServices.ComVisible(false) ] public Object UnsafeDeserialize(Stream serializationStream, HeaderHandler handler) { return Deserialize(serializationStream, handler, false, null); } [ SecurityPermissionAttribute(SecurityAction.LinkDemand, Flags=SecurityPermissionFlag.SerializationFormatter), System.Runtime.InteropServices.ComVisible(false) ] public Object UnsafeDeserializeMethodResponse(Stream serializationStream, HeaderHandler handler, IMethodCallMessage methodCallMessage) { return Deserialize(serializationStream, handler, false, methodCallMessage); } internal Object Deserialize(Stream serializationStream, HeaderHandler handler, bool fCheck, IMethodCallMessage methodCallMessage) { return Deserialize(serializationStream, handler, fCheck, false/*isCrossAppDomain*/, methodCallMessage); } // Deserialize the stream into an object graph. internal Object Deserialize(Stream serializationStream, HeaderHandler handler, bool fCheck, bool isCrossAppDomain, IMethodCallMessage methodCallMessage) { if (serializationStream==null) { throw new ArgumentNullException("serializationStream", String.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("ArgumentNull_WithParamName"),serializationStream)); } if (serializationStream.CanSeek && (serializationStream.Length == 0)) throw new SerializationException(Environment.GetResourceString("Serialization_Stream")); SerTrace.Log(this, "Deserialize Entry"); InternalFE formatterEnums = new InternalFE(); formatterEnums.FEtypeFormat = m_typeFormat; formatterEnums.FEserializerTypeEnum = InternalSerializerTypeE.Binary; formatterEnums.FEassemblyFormat = m_assemblyFormat; formatterEnums.FEsecurityLevel = m_securityLevel; ObjectReader sor = new ObjectReader(serializationStream, m_surrogates, m_context, formatterEnums, m_binder); sor.crossAppDomainArray = m_crossAppDomainArray; return sor.Deserialize(handler, new __BinaryParser(serializationStream, sor), fCheck, isCrossAppDomain, methodCallMessage); } public void Serialize(Stream serializationStream,Object graph) { Serialize(serializationStream, graph, null); } // Commences the process of serializing the entire graph. All of the data (in the appropriate format // is emitted onto the stream). public void Serialize(Stream serializationStream, Object graph, Header[] headers) { Serialize(serializationStream, graph, headers, true); } // Commences the process of serializing the entire graph. All of the data (in the appropriate format // is emitted onto the stream). internal void Serialize(Stream serializationStream, Object graph, Header[] headers, bool fCheck) { if (serializationStream==null) { throw new ArgumentNullException("serializationStream", String.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("ArgumentNull_WithParamName"),serializationStream)); } SerTrace.Log(this, "Serialize Entry"); InternalFE formatterEnums = new InternalFE(); formatterEnums.FEtypeFormat = m_typeFormat; formatterEnums.FEserializerTypeEnum = InternalSerializerTypeE.Binary; formatterEnums.FEassemblyFormat = m_assemblyFormat; ObjectWriter sow = new ObjectWriter(m_surrogates, m_context, formatterEnums); __BinaryWriter binaryWriter = new __BinaryWriter(serializationStream, sow, m_typeFormat); sow.Serialize(graph, headers, binaryWriter, fCheck); m_crossAppDomainArray = sow.crossAppDomainArray; } } } // 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
- XmlBinaryWriter.cs
- Point3DKeyFrameCollection.cs
- WinFormsUtils.cs
- GeneralTransformGroup.cs
- VoiceChangeEventArgs.cs
- MetadataSource.cs
- XmlUtf8RawTextWriter.cs
- ProgressBarBrushConverter.cs
- MergeEnumerator.cs
- EventPrivateKey.cs
- PenThreadWorker.cs
- OleDbCommand.cs
- WorkItem.cs
- WmpBitmapDecoder.cs
- SplineKeyFrames.cs
- ExpandedProjectionNode.cs
- SafeHGlobalHandleCritical.cs
- WebPartHeaderCloseVerb.cs
- XmlSchemaSimpleContentExtension.cs
- SoapIgnoreAttribute.cs
- String.cs
- AsyncResult.cs
- XmlNamespaceDeclarationsAttribute.cs
- ConsumerConnectionPointCollection.cs
- TypeResolvingOptions.cs
- MSAAEventDispatcher.cs
- BinaryWriter.cs
- RoleBoolean.cs
- XamlValidatingReader.cs
- TagMapCollection.cs
- MetadataExchangeClient.cs
- AdobeCFFWrapper.cs
- DefaultAssemblyResolver.cs
- StorageRoot.cs
- DeviceSpecificDialogCachedState.cs
- IssuanceLicense.cs
- WebException.cs
- Int16Animation.cs
- PackageRelationshipCollection.cs
- SQLInt64Storage.cs
- MetroSerializationManager.cs
- CalendarAutomationPeer.cs
- PathData.cs
- MemberJoinTreeNode.cs
- SecurityState.cs
- HtmlAnchor.cs
- RangeValuePattern.cs
- IRCollection.cs
- DataGridLinkButton.cs
- DataGridViewCellMouseEventArgs.cs
- OutKeywords.cs
- DataGridGeneralPage.cs
- SecurityTokenRequirement.cs
- Symbol.cs
- PerformanceCounterLib.cs
- InvalidCardException.cs
- ProxyAttribute.cs
- SignatureGenerator.cs
- TraceSection.cs
- TimeZone.cs
- ContainerUtilities.cs
- TreeNodeBindingCollection.cs
- XPathAncestorIterator.cs
- WebPartHelpVerb.cs
- MULTI_QI.cs
- Normalization.cs
- SchemaSetCompiler.cs
- smtpconnection.cs
- UInt32.cs
- FastPropertyAccessor.cs
- XsltException.cs
- EncoderExceptionFallback.cs
- LongTypeConverter.cs
- BooleanExpr.cs
- safemediahandle.cs
- RewritingProcessor.cs
- SafeRightsManagementHandle.cs
- ImageSourceConverter.cs
- RotationValidation.cs
- DataService.cs
- RemotingService.cs
- Vector3DConverter.cs
- SerialReceived.cs
- ParentControlDesigner.cs
- VisualStyleElement.cs
- DaylightTime.cs
- x509utils.cs
- InitializeCorrelation.cs
- QilGeneratorEnv.cs
- DataServiceHostWrapper.cs
- DataGridViewCellToolTipTextNeededEventArgs.cs
- ToolTipAutomationPeer.cs
- CodeBinaryOperatorExpression.cs
- OrderByExpression.cs
- ValueType.cs
- SerializationSectionGroup.cs
- NextPreviousPagerField.cs
- XomlDesignerLoader.cs
- DataGridViewButtonColumn.cs
- IntegerFacetDescriptionElement.cs