Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / whidbey / netfxsp / ndp / clr / src / BCL / System / Runtime / Serialization / Formatters / Binary / BinaryObjectInfo.cs / 1 / BinaryObjectInfo.cs
// ==++==
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// ==--==
/*============================================================
**
** Class: SerObjectInfo
**
**
** Purpose: Holds information about an objects Members
**
**
===========================================================*/
namespace System.Runtime.Serialization.Formatters.Binary
{
using System.Runtime.Remoting;
using System.Runtime.Serialization;
using System;
using System.Collections;
using System.Reflection;
using System.Diagnostics;
using System.Globalization;
// This class contains information about an object. It is used so that
// the rest of the Formatter routines can use a common interface for
// a normal object, an ISerializable object, and a surrogate object
//
// The methods in this class are for the internal use of the Formatters.
// There use will be restricted when signing is supported for assemblies
internal sealed class WriteObjectInfo
{
internal int objectInfoId;
internal Object obj;
internal Type objectType;
internal bool isSi = false;
internal bool isNamed = false;
internal bool isTyped = false;
internal bool isArray = false;
internal SerializationInfo si = null;
internal SerObjectInfoCache cache = null;
internal Object[] memberData = null;
internal ISerializationSurrogate serializationSurrogate = null;
internal StreamingContext context;
internal SerObjectInfoInit serObjectInfoInit = null;
// Writing and Parsing information
internal long objectId;
internal long assemId;
internal WriteObjectInfo()
{
}
internal void ObjectEnd()
{
SerTrace.Log( this, objectInfoId," objectType ",objectType," ObjectEnd");
PutObjectInfo(serObjectInfoInit, this);
}
private void InternalInit()
{
SerTrace.Log( this, objectInfoId," objectType ",objectType," InternalInit");
obj = null;
objectType = null;
isSi = false;
isNamed = false;
isTyped = false;
isArray = false;
si = null;
cache = null;
memberData = null;
// Writing and Parsing information
objectId = 0;
assemId = 0;
}
internal static WriteObjectInfo Serialize(Object obj, ISurrogateSelector surrogateSelector, StreamingContext context, SerObjectInfoInit serObjectInfoInit, IFormatterConverter converter, ObjectWriter objectWriter)
{
WriteObjectInfo soi = GetObjectInfo(serObjectInfoInit);
soi.InitSerialize(obj, surrogateSelector, context, serObjectInfoInit, converter, objectWriter);
return soi;
}
// Write constructor
internal void InitSerialize(Object obj, ISurrogateSelector surrogateSelector, StreamingContext context, SerObjectInfoInit serObjectInfoInit, IFormatterConverter converter, ObjectWriter objectWriter)
{
SerTrace.Log( this, objectInfoId," Constructor 1 ",obj);
this.context = context;
this.obj = obj;
this.serObjectInfoInit = serObjectInfoInit;
ISurrogateSelector surrogateSelectorTemp;
if (RemotingServices.IsTransparentProxy(obj))
objectType = Converter.typeofMarshalByRefObject;
else
objectType = obj.GetType();
if (objectType.IsArray)
{
isArray = true;
InitNoMembers();
return;
}
SerTrace.Log( this, objectInfoId," Constructor 1 trace 2");
objectWriter.ObjectManager.RegisterObject(obj);
if (surrogateSelector != null && (serializationSurrogate = surrogateSelector.GetSurrogate(objectType, context, out surrogateSelectorTemp)) != null)
{
SerTrace.Log( this, objectInfoId," Constructor 1 trace 3");
si = new SerializationInfo(objectType, converter);
if (!objectType.IsPrimitive)
serializationSurrogate.GetObjectData(obj, si, context);
InitSiWrite();
}
else if (obj is ISerializable)
{
if (!objectType.IsSerializable) {
throw new SerializationException(String.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("Serialization_NonSerType"),
objectType.FullName, objectType.Assembly.FullName));
}
si = new SerializationInfo(objectType, converter);
((ISerializable)obj).GetObjectData(si, context);
SerTrace.Log( this, objectInfoId," Constructor 1 trace 4 ISerializable "+objectType);
InitSiWrite();
}
else
{
SerTrace.Log(this, objectInfoId," Constructor 1 trace 5");
InitMemberInfo();
}
}
[Conditional("SER_LOGGING")]
private void DumpMemberInfo()
{
for (int i=0; i0 && cache.memberNames[lastPosition].Equals(name))
{
return lastPosition;
}
else if ((++lastPosition < cache.memberNames.Length) && (cache.memberNames[lastPosition].Equals(name)))
{
return lastPosition;
}
else
{
// Search for name
SerTrace.Log( this, objectInfoId," Position miss search for name "+name);
for (int i=0; i0 && cache.memberNames[lastPosition].Equals(name))
{
return lastPosition;
}
else if ((++lastPosition < cache.memberNames.Length) && (cache.memberNames[lastPosition].Equals(name)))
{
return lastPosition;
}
else
{
// Search for name
SerTrace.Log( this, objectInfoId," Position miss search for name "+name);
for (int i=0; i
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- SystemFonts.cs
- HTMLTagNameToTypeMapper.cs
- EntityDataSourceContextCreatedEventArgs.cs
- StateWorkerRequest.cs
- CreateUserErrorEventArgs.cs
- AsymmetricSecurityBindingElement.cs
- SqlFormatter.cs
- TabControlDesigner.cs
- DesignTimeXamlWriter.cs
- BuildProviderUtils.cs
- TogglePattern.cs
- WebPartDisplayMode.cs
- ProviderSettingsCollection.cs
- XmlNullResolver.cs
- ToolStripPanelDesigner.cs
- FaultCode.cs
- grammarelement.cs
- MatrixAnimationBase.cs
- MutexSecurity.cs
- Stack.cs
- BodyWriter.cs
- SaveFileDialog.cs
- WebPartCloseVerb.cs
- MultilineStringConverter.cs
- MachineSettingsSection.cs
- WebReferencesBuildProvider.cs
- SessionStateUtil.cs
- UserControlCodeDomTreeGenerator.cs
- ProcessHostFactoryHelper.cs
- SharedUtils.cs
- ListViewGroupConverter.cs
- DataServiceClientException.cs
- CatalogPartDesigner.cs
- CodePropertyReferenceExpression.cs
- ParameterBuilder.cs
- RightsManagementEncryptedStream.cs
- Rule.cs
- WorkflowTransactionOptions.cs
- HandlerBase.cs
- StandardRuntimeEnumValidatorAttribute.cs
- AppDomainGrammarProxy.cs
- XPathExpr.cs
- NativeMethods.cs
- MSAAEventDispatcher.cs
- EncryptedReference.cs
- List.cs
- ControlCachePolicy.cs
- FixedPosition.cs
- EncryptedKeyIdentifierClause.cs
- TypeGeneratedEventArgs.cs
- handlecollector.cs
- DefaultMemberAttribute.cs
- FormView.cs
- Model3D.cs
- ImageIndexEditor.cs
- PeerApplication.cs
- DbgCompiler.cs
- StopRoutingHandler.cs
- InternalResources.cs
- TransformDescriptor.cs
- InternalCache.cs
- ChtmlTextWriter.cs
- HtmlElementCollection.cs
- CodeNamespaceImport.cs
- AssemblyAttributesGoHere.cs
- login.cs
- ImpersonationContext.cs
- NativeMethods.cs
- HtmlInputImage.cs
- ModulesEntry.cs
- DateTimeParse.cs
- DiagnosticsConfiguration.cs
- Container.cs
- InlineCollection.cs
- XmlHierarchicalDataSourceView.cs
- ObjectQueryExecutionPlan.cs
- WhitespaceReader.cs
- ItemList.cs
- CodeSubDirectory.cs
- HostingEnvironmentException.cs
- PagesChangedEventArgs.cs
- CompositeTypefaceMetrics.cs
- SqlResolver.cs
- ConnectivityStatus.cs
- SqlStatistics.cs
- Underline.cs
- SimpleTypeResolver.cs
- TextWriter.cs
- ValueQuery.cs
- RightsDocument.cs
- FilterQuery.cs
- DataGridViewColumnDividerDoubleClickEventArgs.cs
- TokenizerHelper.cs
- TabItem.cs
- WebPartExportVerb.cs
- PersianCalendar.cs
- Byte.cs
- ControlValuePropertyAttribute.cs
- NullRuntimeConfig.cs
- TimeSpanConverter.cs