Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / WCF / Serialization / System / Runtime / Serialization / ExtensionDataObject.cs / 1305376 / ExtensionDataObject.cs
//------------------------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
//-----------------------------------------------------------------------------
namespace System.Runtime.Serialization
{
using System;
using System.Xml;
using System.Collections.Generic;
using System.Globalization;
public sealed class ExtensionDataObject
{
IList members;
#if USE_REFEMIT
public ExtensionDataObject()
#else
internal ExtensionDataObject()
#endif
{
}
#if USE_REFEMIT
public IList Members
#else
internal IList Members
#endif
{
get { return members; }
set { members = value; }
}
}
#if USE_REFEMIT
public class ExtensionDataMember
#else
internal class ExtensionDataMember
#endif
{
string name;
string ns;
IDataNode value;
int memberIndex;
public string Name
{
get { return name; }
set { name = value; }
}
public string Namespace
{
get { return ns; }
set { ns = value; }
}
public IDataNode Value
{
get { return value; }
set { this.value = value; }
}
public int MemberIndex
{
get { return memberIndex; }
set { memberIndex = value; }
}
}
#if USE_REFEMIT
public interface IDataNode
#else
internal interface IDataNode
#endif
{
Type DataType { get; }
object Value { get; set; } // boxes for primitives
string DataContractName { get; set; }
string DataContractNamespace { get; set; }
string ClrTypeName { get; set; }
string ClrAssemblyName { get; set; }
string Id { get; set; }
bool PreservesReferences { get; }
// NOTE: consider moving below APIs to DataNode if IDataNode API is made public
void GetData(ElementData element);
bool IsFinalValue { get; set; }
void Clear();
}
internal class DataNode : IDataNode
{
protected Type dataType;
T value;
string dataContractName;
string dataContractNamespace;
string clrTypeName;
string clrAssemblyName;
string id = Globals.NewObjectId;
bool isFinalValue;
internal DataNode()
{
this.dataType = typeof(T);
this.isFinalValue = true;
}
internal DataNode(T value) : this()
{
this.value = value;
}
public Type DataType
{
get { return dataType; }
}
public object Value
{
get { return value; }
set { this.value = (T)value; }
}
bool IDataNode.IsFinalValue
{
get { return isFinalValue; }
set { isFinalValue = value; }
}
public T GetValue()
{
return value;
}
#if NotUsed
public void SetValue(T value)
{
this.value = value;
}
#endif
public string DataContractName
{
get { return dataContractName; }
set { dataContractName = value; }
}
public string DataContractNamespace
{
get { return dataContractNamespace; }
set { dataContractNamespace = value; }
}
public string ClrTypeName
{
get { return clrTypeName; }
set { clrTypeName = value; }
}
public string ClrAssemblyName
{
get { return clrAssemblyName; }
set { clrAssemblyName = value; }
}
public bool PreservesReferences
{
get { return (Id != Globals.NewObjectId); }
}
public string Id
{
get { return id; }
set { id = value; }
}
public virtual void GetData(ElementData element)
{
element.dataNode = this;
element.attributeCount = 0;
element.childElementIndex = 0;
if (DataContractName != null)
AddQualifiedNameAttribute(element, Globals.XsiPrefix, Globals.XsiTypeLocalName, Globals.SchemaInstanceNamespace, DataContractName, DataContractNamespace);
if (ClrTypeName != null)
element.AddAttribute(Globals.SerPrefix, Globals.SerializationNamespace, Globals.ClrTypeLocalName, ClrTypeName);
if (ClrAssemblyName != null)
element.AddAttribute(Globals.SerPrefix, Globals.SerializationNamespace, Globals.ClrAssemblyLocalName, ClrAssemblyName);
}
public virtual void Clear()
{
// dataContractName not cleared because it is used when re-serializing from unknown data
clrTypeName = clrAssemblyName = null;
}
internal void AddQualifiedNameAttribute(ElementData element, string elementPrefix, string elementName, string elementNs, string valueName, string valueNs)
{
string prefix = ExtensionDataReader.GetPrefix(valueNs);
element.AddAttribute(elementPrefix, elementNs, elementName, String.Format(CultureInfo.InvariantCulture, "{0}:{1}", prefix, valueName));
bool prefixDeclaredOnElement = false;
if (element.attributes != null)
{
for (int i = 0; i < element.attributes.Length; i++)
{
AttributeData attribute = element.attributes[i];
if (attribute != null && attribute.prefix == Globals.XmlnsPrefix && attribute.localName == prefix)
{
prefixDeclaredOnElement = true;
break;
}
}
}
if (!prefixDeclaredOnElement)
element.AddAttribute(Globals.XmlnsPrefix, Globals.XmlnsNamespace, prefix, valueNs);
}
}
internal class ClassDataNode : DataNode
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- EntitySqlQueryCacheEntry.cs
- BitmapEffectInput.cs
- TrackingProfileDeserializationException.cs
- ConstructorNeedsTagAttribute.cs
- SafeSecurityHelper.cs
- ManagedWndProcTracker.cs
- CompoundFileStorageReference.cs
- ConstructorExpr.cs
- WindowsSolidBrush.cs
- NetTcpSection.cs
- BookmarkManager.cs
- ScrollItemPatternIdentifiers.cs
- GeneralTransformCollection.cs
- ColumnResizeAdorner.cs
- RoleService.cs
- InputDevice.cs
- ellipse.cs
- WebServiceHostFactory.cs
- storepermission.cs
- MatrixAnimationUsingKeyFrames.cs
- SmtpTransport.cs
- SetterBase.cs
- Msmq4PoisonHandler.cs
- StoryFragments.cs
- CleanUpVirtualizedItemEventArgs.cs
- DataServiceQueryException.cs
- DispatcherEventArgs.cs
- WebPartActionVerb.cs
- ExpressionVisitor.cs
- TagNameToTypeMapper.cs
- DataGridViewButtonColumn.cs
- ModulesEntry.cs
- RoleBoolean.cs
- PerformanceCounterLib.cs
- BamlLocalizabilityResolver.cs
- ExceptionHelpers.cs
- SecurityBindingElementImporter.cs
- DrawingAttributesDefaultValueFactory.cs
- ModelItemExtensions.cs
- XPathEmptyIterator.cs
- ActiveDesignSurfaceEvent.cs
- Model3DGroup.cs
- ObjectSpanRewriter.cs
- ConnectionPoolManager.cs
- NullableFloatAverageAggregationOperator.cs
- OptimizerPatterns.cs
- OleCmdHelper.cs
- UnsafeNativeMethodsTablet.cs
- EventMappingSettings.cs
- OrCondition.cs
- CountAggregationOperator.cs
- BookmarkWorkItem.cs
- DetailsViewUpdateEventArgs.cs
- OleDbParameter.cs
- TypeValidationEventArgs.cs
- ClientFormsAuthenticationMembershipProvider.cs
- DPCustomTypeDescriptor.cs
- HandlerMappingMemo.cs
- TypedColumnHandler.cs
- XmlDictionaryWriter.cs
- PropagationProtocolsTracing.cs
- SmiEventStream.cs
- ClientRoleProvider.cs
- RightsManagementEncryptedStream.cs
- Calendar.cs
- Utils.cs
- ResourceContainerWrapper.cs
- RuleSetDialog.cs
- SqlDataSourceFilteringEventArgs.cs
- XPathAxisIterator.cs
- Style.cs
- ChannelPoolSettings.cs
- _SslSessionsCache.cs
- Configuration.cs
- CrossContextChannel.cs
- SoapTransportImporter.cs
- MenuItem.cs
- WebReferenceCollection.cs
- HttpListenerException.cs
- MgmtResManager.cs
- ImportDesigner.xaml.cs
- WebBrowser.cs
- StatusBarAutomationPeer.cs
- SharedPerformanceCounter.cs
- Vector3DValueSerializer.cs
- MetadataSerializer.cs
- XamlVector3DCollectionSerializer.cs
- DataGridCellClipboardEventArgs.cs
- TimersDescriptionAttribute.cs
- Point3DAnimationBase.cs
- HttpInputStream.cs
- DataControlFieldCollection.cs
- SafeFileMappingHandle.cs
- HtmlInputHidden.cs
- HashCodeCombiner.cs
- Emitter.cs
- ServiceCredentials.cs
- Ray3DHitTestResult.cs
- RegexRunnerFactory.cs
- PageRequestManager.cs