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
- StrokeNode.cs
- UnsafeNativeMethods.cs
- Marshal.cs
- SelectionWordBreaker.cs
- AxWrapperGen.cs
- AliasedSlot.cs
- HtmlHistory.cs
- InstanceData.cs
- HttpListener.cs
- EnvironmentPermission.cs
- AttributeTable.cs
- CommentEmitter.cs
- ExternalException.cs
- ScrollChangedEventArgs.cs
- DSGeneratorProblem.cs
- SiteMapProvider.cs
- ImageBrush.cs
- QuotedStringFormatReader.cs
- EntityTypeEmitter.cs
- Attributes.cs
- TextBoxBaseDesigner.cs
- SecurityResources.cs
- MexServiceChannelBuilder.cs
- XmlSchemaDatatype.cs
- MediaElementAutomationPeer.cs
- webeventbuffer.cs
- XamlSerializationHelper.cs
- BamlTreeMap.cs
- OleDbInfoMessageEvent.cs
- CultureTable.cs
- DiagnosticTrace.cs
- RijndaelManagedTransform.cs
- XmlWrappingReader.cs
- SqlUDTStorage.cs
- PartitionResolver.cs
- Facet.cs
- PasswordPropertyTextAttribute.cs
- OleServicesContext.cs
- PropertyGridCommands.cs
- ProviderConnectionPoint.cs
- TimeZone.cs
- FactoryMaker.cs
- HtmlUtf8RawTextWriter.cs
- ScriptReference.cs
- ViewBase.cs
- XPathQilFactory.cs
- FontFamilyIdentifier.cs
- Pool.cs
- ProcessHostConfigUtils.cs
- OptimalTextSource.cs
- BinaryWriter.cs
- PointCollectionValueSerializer.cs
- Msmq.cs
- DesignerActionService.cs
- QilSortKey.cs
- DesignerSerializationVisibilityAttribute.cs
- EditorServiceContext.cs
- OracleColumn.cs
- SqlRecordBuffer.cs
- InlineUIContainer.cs
- LocalizabilityAttribute.cs
- ClientEventManager.cs
- SafeNativeMethods.cs
- QueueProcessor.cs
- TextLineBreak.cs
- LoginView.cs
- MediaSystem.cs
- ToolStripOverflow.cs
- CommonXSendMessage.cs
- BitmapEffectRenderDataResource.cs
- MulticastNotSupportedException.cs
- EventSinkHelperWriter.cs
- FixedSOMTable.cs
- UIHelper.cs
- ReadOnlyActivityGlyph.cs
- SchemaMapping.cs
- CFStream.cs
- XpsTokenContext.cs
- AssemblyAttributes.cs
- FunctionMappingTranslator.cs
- PropertyItem.cs
- DataSvcMapFile.cs
- CannotUnloadAppDomainException.cs
- ContourSegment.cs
- CodePrimitiveExpression.cs
- ClientSettings.cs
- WebControl.cs
- ValidationSummary.cs
- TimelineClockCollection.cs
- XmlToDatasetMap.cs
- WinEventTracker.cs
- DeferredSelectedIndexReference.cs
- SqlDataAdapter.cs
- AssociationEndMember.cs
- ReadOnlyDictionary.cs
- HttpListenerRequest.cs
- SortedSetDebugView.cs
- AsyncOperation.cs
- XsltSettings.cs
- TextRunCacheImp.cs