Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / Serialization / System / Runtime / Serialization / XmlObjectSerializerContext.cs / 3 / XmlObjectSerializerContext.cs
//------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
//-----------------------------------------------------------
namespace System.Runtime.Serialization
{
using System;
using System.Collections;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Reflection;
using System.Text;
using System.Xml;
using System.Collections.Generic;
using DataContractDictionary = System.Collections.Generic.Dictionary;
using System.Security;
#if USE_REFEMIT
public class XmlObjectSerializerContext
#else
internal class XmlObjectSerializerContext
#endif
{
protected XmlObjectSerializer serializer;
protected DataContract rootTypeDataContract;
internal ScopedKnownTypes scopedKnownTypes = new ScopedKnownTypes();
protected DataContractDictionary serializerKnownDataContracts;
protected IList serializerKnownTypeList;
///
/// Critical - We base the decision whether to Demand SerializationFormatterPermission on this value
///
[SecurityCritical]
bool demandedSerializationFormatterPermission;
///
/// Critical - We base the decision whether to Demand MemberAccess permission on this value
///
[SecurityCritical]
bool demandedMemberAccessPermission;
int itemCount;
int maxItemsInObjectGraph;
StreamingContext streamingContext;
bool ignoreExtensionDataObject;
internal XmlObjectSerializerContext(XmlObjectSerializer serializer, int maxItemsInObjectGraph, StreamingContext streamingContext, bool ignoreExtensionDataObject)
{
this.serializer = serializer;
this.itemCount = 1;
this.maxItemsInObjectGraph = maxItemsInObjectGraph;
this.streamingContext = streamingContext;
this.ignoreExtensionDataObject = ignoreExtensionDataObject;
}
internal XmlObjectSerializerContext(DataContractSerializer serializer, DataContract rootTypeDataContract)
: this(serializer,
serializer.MaxItemsInObjectGraph,
new StreamingContext(StreamingContextStates.All),
serializer.IgnoreExtensionDataObject)
{
this.rootTypeDataContract = rootTypeDataContract;
this.serializerKnownTypeList = serializer.knownTypeList;
this.serializerKnownDataContracts = serializer.KnownDataContracts;
}
internal XmlObjectSerializerContext(NetDataContractSerializer serializer)
: this(serializer,
serializer.MaxItemsInObjectGraph,
serializer.Context,
serializer.IgnoreExtensionDataObject)
{
}
internal virtual SerializationMode Mode
{
get { return SerializationMode.SharedContract; }
}
internal virtual bool IsGetOnlyCollection
{
get { return false; }
set { }
}
///
/// Critical - Demands SerializationFormatter permission. demanding the right permission is critical
/// Safe - no data or control leaks in or out, must be callable from transparent generated IL
///
[SecurityCritical, SecurityTreatAsSafe]
public void DemandSerializationFormatterPermission()
{
if (!demandedSerializationFormatterPermission)
{
Globals.SerializationFormatterPermission.Demand();
demandedSerializationFormatterPermission = true;
}
}
///
/// Critical - Demands MemberAccess permission. demanding the right permission is critical
/// Safe - no data or control leaks in or out, must be callable from transparent generated IL
///
[SecurityCritical, SecurityTreatAsSafe]
public void DemandMemberAccessPermission()
{
if (!demandedMemberAccessPermission)
{
Globals.MemberAccessPermission.Demand();
demandedMemberAccessPermission = true;
}
}
#if USE_REFEMIT
public StreamingContext GetStreamingContext()
#else
internal StreamingContext GetStreamingContext()
#endif
{
return streamingContext;
}
#if USE_REFEMIT
public void IncrementItemCount(int count)
#else
internal void IncrementItemCount(int count)
#endif
{
if (count > maxItemsInObjectGraph - itemCount)
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(XmlObjectSerializer.CreateSerializationException(SR.GetString(SR.ExceededMaxItemsQuota, maxItemsInObjectGraph)));
itemCount += count;
}
internal int RemainingItemCount
{
get { return maxItemsInObjectGraph - itemCount; }
}
internal bool IgnoreExtensionDataObject
{
get { return ignoreExtensionDataObject; }
}
internal DataContract GetDataContract(Type type)
{
return GetDataContract(type.TypeHandle, type);
}
internal virtual DataContract GetDataContract(RuntimeTypeHandle typeHandle, Type type)
{
if (IsGetOnlyCollection)
{
return DataContract.GetGetOnlyCollectionDataContract(DataContract.GetId(typeHandle), typeHandle, type, Mode);
}
else
{
return DataContract.GetDataContract(typeHandle, type, Mode);
}
}
internal virtual DataContract GetDataContractSkipValidation(int typeId, RuntimeTypeHandle typeHandle, Type type)
{
if (IsGetOnlyCollection)
{
return DataContract.GetGetOnlyCollectionDataContractSkipValidation(typeId, typeHandle, type);
}
else
{
return DataContract.GetDataContractSkipValidation(typeId, typeHandle, type);
}
}
internal virtual DataContract GetDataContract(int id, RuntimeTypeHandle typeHandle)
{
if (IsGetOnlyCollection)
{
return DataContract.GetGetOnlyCollectionDataContract(id, typeHandle, null /*type*/, Mode);
}
else
{
return DataContract.GetDataContract(id, typeHandle, Mode);
}
}
internal virtual void CheckIfTypeSerializable(Type memberType, bool isMemberTypeSerializable)
{
if (!isMemberTypeSerializable)
throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidDataContractException(SR.GetString(SR.TypeNotSerializable, memberType)));
}
internal virtual Type GetSurrogatedType(Type type)
{
return type;
}
DataContractDictionary SerializerKnownDataContracts
{
get
{
// This field must be initialized during construction by serializers using data contracts.
return this.serializerKnownDataContracts;
}
}
DataContract GetDataContractFromSerializerKnownTypes(XmlQualifiedName qname)
{
DataContractDictionary serializerKnownDataContracts = this.SerializerKnownDataContracts;
if (serializerKnownDataContracts == null)
return null;
DataContract outDataContract;
return serializerKnownDataContracts.TryGetValue(qname, out outDataContract) ? outDataContract : null;
}
internal static DataContractDictionary GetDataContractsForKnownTypes(IList knownTypeList)
{
if (knownTypeList == null) return null;
DataContractDictionary dataContracts = new DataContractDictionary();
Dictionary typesChecked = new Dictionary();
for (int i = 0; i < knownTypeList.Count; i++)
{
Type knownType = knownTypeList[i];
if (knownType == null)
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentException(SR.GetString(SR.NullKnownType, "knownTypes")));
DataContract.CheckAndAdd(knownType, typesChecked, ref dataContracts);
}
return dataContracts;
}
protected DataContract ResolveDataContractFromKnownTypes(string typeName, string typeNs, DataContract memberTypeContract)
{
DataContract dataContract = PrimitiveDataContract.GetPrimitiveDataContract(typeName, typeNs);
if (dataContract == null)
{
XmlQualifiedName qname = new XmlQualifiedName(typeName, typeNs);
dataContract = scopedKnownTypes.GetDataContract(qname);
if (dataContract == null)
{
dataContract = GetDataContractFromSerializerKnownTypes(qname);
}
if (dataContract == null && memberTypeContract != null
&& !memberTypeContract.UnderlyingType.IsInterface
&& memberTypeContract.StableName == qname)
{
dataContract = memberTypeContract;
}
if (dataContract == null && rootTypeDataContract != null)
{
if (rootTypeDataContract.StableName == qname)
dataContract = rootTypeDataContract;
else
{
CollectionDataContract collectionContract = rootTypeDataContract as CollectionDataContract;
while (collectionContract != null)
{
DataContract itemContract = GetDataContract(GetSurrogatedType(collectionContract.ItemType));
if (itemContract.StableName == qname)
{
dataContract = itemContract;
break;
}
collectionContract = itemContract as CollectionDataContract;
}
}
}
}
return dataContract;
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ContextBase.cs
- GCHandleCookieTable.cs
- SmtpDigestAuthenticationModule.cs
- ManagedCodeMarkers.cs
- ProviderConnectionPointCollection.cs
- MetadataArtifactLoaderFile.cs
- ParserStack.cs
- PageOutputColor.cs
- LocatorBase.cs
- GeometryGroup.cs
- IApplicationTrustManager.cs
- FunctionDescription.cs
- GridViewSortEventArgs.cs
- OrthographicCamera.cs
- FieldDescriptor.cs
- DesignerValidatorAdapter.cs
- InputMethod.cs
- precedingsibling.cs
- SqlProviderManifest.cs
- ResolveNameEventArgs.cs
- AuthenticationModuleElement.cs
- GestureRecognitionResult.cs
- Delegate.cs
- WindowsStartMenu.cs
- DataBoundLiteralControl.cs
- DuplicateWaitObjectException.cs
- WS2007FederationHttpBindingCollectionElement.cs
- NetworkCredential.cs
- GroupBoxRenderer.cs
- ColorDialog.cs
- XmlMtomWriter.cs
- MetabaseSettingsIis7.cs
- XmlSubtreeReader.cs
- URLEditor.cs
- WhiteSpaceTrimStringConverter.cs
- SQLSingle.cs
- securitycriticaldataformultiplegetandset.cs
- CodeSnippetCompileUnit.cs
- PropertyEmitterBase.cs
- XomlCompiler.cs
- TagPrefixAttribute.cs
- XamlToRtfParser.cs
- EntitySqlQueryCacheEntry.cs
- arclist.cs
- TranslateTransform3D.cs
- ViewCellRelation.cs
- SecurityHelper.cs
- DataSvcMapFile.cs
- CompositeScriptReferenceEventArgs.cs
- ListItemsCollectionEditor.cs
- SQLBytes.cs
- Animatable.cs
- PageAsyncTaskManager.cs
- Metafile.cs
- FacetDescriptionElement.cs
- MeshGeometry3D.cs
- XmlDataSourceView.cs
- TreeIterators.cs
- HtmlWindow.cs
- WMICapabilities.cs
- TabItem.cs
- AmbientEnvironment.cs
- ThreadExceptionEvent.cs
- SchemaMerger.cs
- httpserverutility.cs
- RenderData.cs
- TextEmbeddedObject.cs
- _ContextAwareResult.cs
- SingleResultAttribute.cs
- ObjRef.cs
- XmlRawWriterWrapper.cs
- RelationshipEndMember.cs
- TextBoxBase.cs
- PropertyValidationContext.cs
- Path.cs
- Selection.cs
- XmlHierarchicalDataSourceView.cs
- ContainerAction.cs
- WSDualHttpBindingElement.cs
- CodePageUtils.cs
- Viewport3DVisual.cs
- TemplateXamlParser.cs
- EntityDataSourceView.cs
- FormatterServices.cs
- SelectionItemPattern.cs
- RedirectionProxy.cs
- DbParameterHelper.cs
- ProxyDataContractResolver.cs
- SnapshotChangeTrackingStrategy.cs
- NetworkInformationPermission.cs
- RSAOAEPKeyExchangeDeformatter.cs
- ExtenderControl.cs
- CategoryGridEntry.cs
- WindowsTab.cs
- HttpProfileGroupBase.cs
- TdsParserStateObject.cs
- DesignTimeTemplateParser.cs
- SafeFreeMibTable.cs
- HostSecurityManager.cs
- StatusStrip.cs