Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / clr / src / BCL / System / Runtime / Serialization / Formatters / Binary / BinaryFormatter.cs / 1305376 / 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.Collections.Generic;
using System.Runtime.Serialization.Formatters;
#if FEATURE_REMOTING
using System.Runtime.Remoting.Proxies;
#endif
using System.Runtime.Remoting;
using System.Runtime.Remoting.Messaging;
using System.Runtime.Serialization;
using System.Security.Permissions;
using System.Diagnostics.Contracts;
[System.Runtime.InteropServices.ComVisible(true)]
sealed public class BinaryFormatter :
#if !FEATURE_REMOTING
IFormatter
#endif
#if NOT_DEFINED
, // CoreCLR: to make parser work we have to have comma after the interface name
#endif
#if FEATURE_REMOTING
IRemotingFormatter
#endif
{
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;
private static Dictionary typeNameCache = new Dictionary();
// 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.
[System.Security.SecuritySafeCritical] // auto-generated
public Object Deserialize(Stream serializationStream)
{
return Deserialize(serializationStream, null);
}
[System.Security.SecurityCritical] // auto-generated
internal Object Deserialize(Stream serializationStream, HeaderHandler handler, bool fCheck)
{
#if FEATURE_REMOTING
return Deserialize(serializationStream, handler, fCheck, null);
#else
if (serializationStream == null)
{
throw new ArgumentNullException("serializationStream", Environment.GetResourceString("ArgumentNull_WithParamName", serializationStream));
}
Contract.EndContractBlock();
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);
#endif
}
// Deserialize the stream into an object graph.
[System.Security.SecuritySafeCritical] // auto-generated
public Object Deserialize(Stream serializationStream, HeaderHandler handler) {
return Deserialize(serializationStream, handler, true);
}
#if FEATURE_REMOTING
[System.Security.SecuritySafeCritical] // auto-generated
public Object DeserializeMethodResponse(Stream serializationStream, HeaderHandler handler, IMethodCallMessage methodCallMessage) {
return Deserialize(serializationStream, handler, true, methodCallMessage);
}
#endif
[System.Security.SecurityCritical] // auto-generated_required
[System.Runtime.InteropServices.ComVisible(false)]
public Object UnsafeDeserialize(Stream serializationStream, HeaderHandler handler) {
return Deserialize(serializationStream, handler, false);
}
#if FEATURE_REMOTING
[System.Security.SecurityCritical] // auto-generated_required
[System.Runtime.InteropServices.ComVisible(false)]
public Object UnsafeDeserializeMethodResponse(Stream serializationStream, HeaderHandler handler, IMethodCallMessage methodCallMessage) {
return Deserialize(serializationStream, handler, false, methodCallMessage);
}
[System.Security.SecurityCritical] // auto-generated
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.
[System.Security.SecurityCritical] // auto-generated
internal Object Deserialize(Stream serializationStream, HeaderHandler handler, bool fCheck, bool isCrossAppDomain, IMethodCallMessage methodCallMessage) {
if (serializationStream==null)
{
throw new ArgumentNullException("serializationStream", Environment.GetResourceString("ArgumentNull_WithParamName",serializationStream));
}
Contract.EndContractBlock();
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);
}
#endif // FEATURE_REMOTING
[System.Security.SecuritySafeCritical] // auto-generated
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).
[System.Security.SecuritySafeCritical] // auto-generated
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).
[System.Security.SecurityCritical] // auto-generated
internal void Serialize(Stream serializationStream, Object graph, Header[] headers, bool fCheck)
{
if (serializationStream == null)
{
throw new ArgumentNullException("serializationStream", Environment.GetResourceString("ArgumentNull_WithParamName", serializationStream));
}
Contract.EndContractBlock();
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, m_binder);
__BinaryWriter binaryWriter = new __BinaryWriter(serializationStream, sow, m_typeFormat);
sow.Serialize(graph, headers, binaryWriter, fCheck);
m_crossAppDomainArray = sow.crossAppDomainArray;
}
internal static TypeInformation GetTypeInformation(Type type)
{
lock (typeNameCache)
{
TypeInformation typeInformation = null;
if (!typeNameCache.TryGetValue(type, out typeInformation))
{
typeInformation = new TypeInformation(FormatterServices.GetClrTypeFullName(type), FormatterServices.GetClrAssemblyName(type));
typeNameCache.Add(type, typeInformation);
}
return typeInformation;
}
}
}
}
// 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
- DbParameterHelper.cs
- NetSectionGroup.cs
- MimeMapping.cs
- ValidationEventArgs.cs
- Camera.cs
- TrustLevel.cs
- CoreSwitches.cs
- WebServiceClientProxyGenerator.cs
- TextRenderingModeValidation.cs
- XPathNode.cs
- GridViewDeletedEventArgs.cs
- HtmlElementCollection.cs
- DataContractSerializerOperationFormatter.cs
- CompilationPass2Task.cs
- XmlPreloadedResolver.cs
- Process.cs
- SqlLiftWhereClauses.cs
- BitmapImage.cs
- MessageSmuggler.cs
- NavigateUrlConverter.cs
- TextParagraphView.cs
- DateTimeOffset.cs
- JavaScriptSerializer.cs
- ToolBarOverflowPanel.cs
- WindowsAltTab.cs
- ScriptResourceHandler.cs
- PagesSection.cs
- FlagsAttribute.cs
- LinqDataSourceEditData.cs
- RulePatternOps.cs
- StringComparer.cs
- nulltextnavigator.cs
- DefaultProxySection.cs
- DictionaryManager.cs
- CommonRemoteMemoryBlock.cs
- Parser.cs
- DataErrorValidationRule.cs
- SQLDecimalStorage.cs
- BaseUriHelper.cs
- AssemblyAttributes.cs
- ParagraphVisual.cs
- AssemblyHash.cs
- followingsibling.cs
- DefaultTraceListener.cs
- BindingWorker.cs
- ButtonFieldBase.cs
- DataBoundControl.cs
- ValueTable.cs
- AsymmetricSignatureDeformatter.cs
- CompiledIdentityConstraint.cs
- hresults.cs
- Attributes.cs
- Int64AnimationBase.cs
- Wizard.cs
- RepeatButton.cs
- PassportAuthenticationEventArgs.cs
- MouseActionConverter.cs
- URLEditor.cs
- AuthenticationServiceManager.cs
- WsdlImporterElementCollection.cs
- PropertyIDSet.cs
- WorkflowInstanceProvider.cs
- Preprocessor.cs
- PropertyEmitterBase.cs
- BinarySerializer.cs
- UnauthorizedWebPart.cs
- XmlCompatibilityReader.cs
- PrintControllerWithStatusDialog.cs
- __Filters.cs
- SingleStorage.cs
- Shape.cs
- CatalogZone.cs
- ComponentResourceKey.cs
- PathSegment.cs
- XmlHierarchicalDataSourceView.cs
- Emitter.cs
- XmlUtil.cs
- SoapHttpTransportImporter.cs
- RowType.cs
- FeatureSupport.cs
- Vector.cs
- CodeDelegateCreateExpression.cs
- DetailsViewUpdateEventArgs.cs
- KeyFrames.cs
- ParserExtension.cs
- NativeMethodsOther.cs
- CalendarDay.cs
- TableSectionStyle.cs
- FatalException.cs
- WebServiceErrorEvent.cs
- RemoteWebConfigurationHostServer.cs
- XsltSettings.cs
- HiddenField.cs
- ListViewItemEventArgs.cs
- XmlChildNodes.cs
- TypeReference.cs
- ReadOnlyAttribute.cs
- CqlWriter.cs
- SpellCheck.cs
- Hashtable.cs