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
- ConstructorBuilder.cs
- ContentPosition.cs
- DataServiceClientException.cs
- ToolboxItem.cs
- RefreshEventArgs.cs
- RawStylusSystemGestureInputReport.cs
- FieldNameLookup.cs
- UpdatePanel.cs
- HtmlElementCollection.cs
- ParsedAttributeCollection.cs
- StringTraceRecord.cs
- RepeaterItem.cs
- ImpersonateTokenRef.cs
- StringInfo.cs
- MessageQueuePermission.cs
- RoleProviderPrincipal.cs
- TypeUtil.cs
- _SslSessionsCache.cs
- IISUnsafeMethods.cs
- DetailsViewPagerRow.cs
- NetSectionGroup.cs
- LoadGrammarCompletedEventArgs.cs
- StateMachine.cs
- DisplayMemberTemplateSelector.cs
- CustomWebEventKey.cs
- SequenceDesigner.xaml.cs
- ProfileSettingsCollection.cs
- DataComponentNameHandler.cs
- RemotingServices.cs
- LicenseContext.cs
- XmlNotation.cs
- AutomationEvent.cs
- CommandExpr.cs
- DataColumnCollection.cs
- ProtocolsConfiguration.cs
- FontCollection.cs
- StringBuilder.cs
- TraceContextRecord.cs
- Menu.cs
- ObjectDataSourceWizardForm.cs
- PasswordBox.cs
- TextPointer.cs
- WpfXamlMember.cs
- SqlDataSourceSelectingEventArgs.cs
- StateItem.cs
- QueryTask.cs
- OperatorExpressions.cs
- FilteredSchemaElementLookUpTable.cs
- TdsEnums.cs
- SecurityAppliedMessage.cs
- OleDbStruct.cs
- SamlAuthorityBinding.cs
- CommittableTransaction.cs
- PersonalizationStateInfo.cs
- ListItemParagraph.cs
- AuthorizationRule.cs
- BaseParagraph.cs
- DataGridViewLinkColumn.cs
- DecimalStorage.cs
- PopupControlService.cs
- ManagedIStream.cs
- DataGridViewAdvancedBorderStyle.cs
- HttpInputStream.cs
- ConfigXmlComment.cs
- XamlTypeMapper.cs
- InplaceBitmapMetadataWriter.cs
- Parser.cs
- InputProcessorProfiles.cs
- DesignerSerializationVisibilityAttribute.cs
- AnimationException.cs
- SQLInt32Storage.cs
- cookiecontainer.cs
- TreeSet.cs
- IIS7WorkerRequest.cs
- DataGridViewIntLinkedList.cs
- DataControlFieldsEditor.cs
- DataGridViewSelectedCellCollection.cs
- UserControlCodeDomTreeGenerator.cs
- ProcessInfo.cs
- SourceItem.cs
- MDIClient.cs
- IISUnsafeMethods.cs
- MultiView.cs
- Transform3D.cs
- AppDomainProtocolHandler.cs
- TextBoxRenderer.cs
- WinEventQueueItem.cs
- DiffuseMaterial.cs
- TableLayoutSettings.cs
- DataGridViewComboBoxEditingControl.cs
- DependencyObjectProvider.cs
- WebAdminConfigurationHelper.cs
- Camera.cs
- PageThemeParser.cs
- RecognizerBase.cs
- GenericTextProperties.cs
- HashHelper.cs
- RijndaelManagedTransform.cs
- RectangleGeometry.cs
- StopRoutingHandler.cs