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 / 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; i 0 && 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
- HttpListenerRequest.cs
- PackagePart.cs
- EdgeProfileValidation.cs
- XpsS0ValidatingLoader.cs
- IsolatedStorageFilePermission.cs
- LogWriteRestartAreaState.cs
- PolyLineSegment.cs
- ToolStripLabel.cs
- ZipIOCentralDirectoryDigitalSignature.cs
- SecureConversationVersion.cs
- DockProviderWrapper.cs
- XmlProcessingInstruction.cs
- DataPagerFieldCommandEventArgs.cs
- DbTypeMap.cs
- LZCodec.cs
- SqlMethodTransformer.cs
- ChildrenQuery.cs
- sortedlist.cs
- KeyValuePairs.cs
- SafeNativeMethodsOther.cs
- XmlAttributeCache.cs
- PropertyCondition.cs
- _RequestLifetimeSetter.cs
- InkCanvas.cs
- CompilationUnit.cs
- PriorityQueue.cs
- CryptoStream.cs
- SchemaDeclBase.cs
- HitTestFilterBehavior.cs
- MdiWindowListItemConverter.cs
- FunctionQuery.cs
- FileSystemWatcher.cs
- DefaultParameterValueAttribute.cs
- StatusBarPanelClickEvent.cs
- SqlGenericUtil.cs
- XmlSerializerSection.cs
- SmtpAuthenticationManager.cs
- ClientUrlResolverWrapper.cs
- PagedDataSource.cs
- PropertyInformation.cs
- OleDbStruct.cs
- DataRowExtensions.cs
- StrongNameMembershipCondition.cs
- SystemPens.cs
- SqlCommandBuilder.cs
- WorkflowInstanceExtensionManager.cs
- ContentIterators.cs
- PageCatalogPart.cs
- CodeObjectCreateExpression.cs
- TabControlEvent.cs
- XmlSchemaFacet.cs
- HealthMonitoringSection.cs
- FrugalList.cs
- ArrayList.cs
- InvalidComObjectException.cs
- RuleSettingsCollection.cs
- OptionUsage.cs
- XmlObjectSerializerReadContext.cs
- ButtonColumn.cs
- ActivityCodeDomReferenceService.cs
- GroupQuery.cs
- FileRecordSequenceHelper.cs
- XmlDataImplementation.cs
- ErrorReporting.cs
- WebException.cs
- NonClientArea.cs
- WindowsSpinner.cs
- HostedHttpRequestAsyncResult.cs
- XmlDocument.cs
- ConsoleCancelEventArgs.cs
- XmlNodeReader.cs
- Directory.cs
- WebRequestModulesSection.cs
- SqlFacetAttribute.cs
- WindowsSysHeader.cs
- ObjectContext.cs
- httpapplicationstate.cs
- ContentPosition.cs
- SchemaNamespaceManager.cs
- ValueQuery.cs
- Matrix3D.cs
- FrameworkReadOnlyPropertyMetadata.cs
- IISMapPath.cs
- ShaperBuffers.cs
- XsltInput.cs
- OciHandle.cs
- SqlDependencyListener.cs
- PolyQuadraticBezierSegment.cs
- PathStreamGeometryContext.cs
- WrappingXamlSchemaContext.cs
- DbConnectionOptions.cs
- DataSourceBooleanViewSchemaConverter.cs
- AutoScrollExpandMessageFilter.cs
- XmlSchemaProviderAttribute.cs
- EntityCollection.cs
- AspNetPartialTrustHelpers.cs
- SimpleFieldTemplateUserControl.cs
- Fonts.cs
- GeometryValueSerializer.cs
- InputLanguageEventArgs.cs