Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / ServiceModel / System / ServiceModel / Dispatcher / XmlSerializerObjectSerializer.cs / 2 / XmlSerializerObjectSerializer.cs
//------------------------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- namespace System.ServiceModel.Dispatcher { using System; using System.Xml; using System.ServiceModel; using System.Xml.Serialization; using System.Collections.Generic; using System.Runtime.Serialization; using System.ServiceModel.Description; internal class XmlSerializerObjectSerializer : XmlObjectSerializer { XmlSerializer serializer; Type rootType; string rootName; string rootNamespace; bool isSerializerSetExplicit = false; internal XmlSerializerObjectSerializer(Type type) { Initialize(type, null /*rootName*/, null /*rootNamespace*/, null /*xmlSerializer*/); } internal XmlSerializerObjectSerializer(Type type, XmlQualifiedName qualifiedName, XmlSerializer xmlSerializer) { if (qualifiedName == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("qualifiedName"); } Initialize(type, qualifiedName.Name, qualifiedName.Namespace, xmlSerializer); } void Initialize(Type type, string rootName, string rootNamespace, XmlSerializer xmlSerializer) { if (type == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("type"); } this.rootType = type; this.rootName = rootName; this.rootNamespace = rootNamespace == null ? string.Empty : rootNamespace; this.serializer = xmlSerializer; if (this.serializer == null) { if (this.rootName == null) this.serializer = new XmlSerializer(type); else { XmlRootAttribute xmlRoot = new XmlRootAttribute(); xmlRoot.ElementName = this.rootName; xmlRoot.Namespace = this.rootNamespace; this.serializer = new XmlSerializer(type, xmlRoot); } } else isSerializerSetExplicit = true; //try to get rootName and rootNamespace from type since root name not set explicitly if (this.rootName == null) { XmlTypeMapping mapping = new XmlReflectionImporter().ImportTypeMapping(this.rootType); this.rootName = mapping.ElementName; this.rootNamespace = mapping.Namespace; } } public override void WriteObject(XmlDictionaryWriter writer, object graph) { if (this.isSerializerSetExplicit) this.serializer.Serialize(writer, new object[] { graph }); else this.serializer.Serialize(writer, graph); } public override void WriteStartObject(XmlDictionaryWriter writer, object graph) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new NotImplementedException()); } public override void WriteObjectContent(XmlDictionaryWriter writer, object graph) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new NotImplementedException()); } public override void WriteEndObject(XmlDictionaryWriter writer) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new NotImplementedException()); } public override object ReadObject(XmlDictionaryReader reader, bool verifyObjectName) { if (this.isSerializerSetExplicit) { object [] deserializedObjects = (object[])this.serializer.Deserialize(reader); if (deserializedObjects != null && deserializedObjects.Length > 0) return deserializedObjects[0]; else return null; } else return this.serializer.Deserialize(reader); } public override bool IsStartObject(XmlDictionaryReader reader) { if (reader == null) throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("reader")); reader.MoveToElement(); if (this.rootName != null) { return reader.IsStartElement(this.rootName, this.rootNamespace); } else { return reader.IsStartElement(); } } } } // 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
- ContentPosition.cs
- ExtenderProvidedPropertyAttribute.cs
- OutputCacheProfile.cs
- MessageContractMemberAttribute.cs
- UserControlDesigner.cs
- TargetControlTypeAttribute.cs
- SelectingProviderEventArgs.cs
- NavigationHelper.cs
- FreezableDefaultValueFactory.cs
- BroadcastEventHelper.cs
- KeyedCollection.cs
- XmlDataProvider.cs
- RewritingPass.cs
- WindowsEditBoxRange.cs
- ObjectDataSourceStatusEventArgs.cs
- BulletDecorator.cs
- XmlSchemaExporter.cs
- NamedPipeWorkerProcess.cs
- FrameworkElementFactory.cs
- SiteMapDataSourceView.cs
- SqlProviderServices.cs
- AbstractDataSvcMapFileLoader.cs
- EastAsianLunisolarCalendar.cs
- CommunicationObjectManager.cs
- RemotingServices.cs
- InheritanceAttribute.cs
- TypefaceMap.cs
- MobileRedirect.cs
- CssClassPropertyAttribute.cs
- CalendarData.cs
- DataControlField.cs
- XmlSchemaSet.cs
- TextEditorMouse.cs
- QueueProcessor.cs
- XamlBuildProvider.cs
- InfoCardSymmetricCrypto.cs
- KeyTimeConverter.cs
- XmlSchemaGroup.cs
- RelOps.cs
- SafeNativeMethodsOther.cs
- ToolStripPanelRenderEventArgs.cs
- ExpressionDumper.cs
- PersistenceTypeAttribute.cs
- DiscriminatorMap.cs
- FrameworkContextData.cs
- OrderedParallelQuery.cs
- SqlUdtInfo.cs
- IconHelper.cs
- ColumnHeader.cs
- UITypeEditor.cs
- ImageSourceValueSerializer.cs
- SetIterators.cs
- TransformerInfo.cs
- Debug.cs
- ToolStripGripRenderEventArgs.cs
- TypefaceMetricsCache.cs
- SerializerDescriptor.cs
- ToolStripItem.cs
- AutomationProperty.cs
- CanonicalFontFamilyReference.cs
- TreeViewAutomationPeer.cs
- BaseAppDomainProtocolHandler.cs
- StateItem.cs
- Token.cs
- SuppressIldasmAttribute.cs
- Mutex.cs
- ObjectHandle.cs
- AttachedPropertyBrowsableAttribute.cs
- DependencyPropertyDescriptor.cs
- SmiConnection.cs
- IisTraceWebEventProvider.cs
- LicFileLicenseProvider.cs
- Convert.cs
- ColumnCollection.cs
- EncoderParameters.cs
- SmiRequestExecutor.cs
- Image.cs
- MatrixCamera.cs
- ListViewCancelEventArgs.cs
- DocumentViewerAutomationPeer.cs
- DoubleAnimationUsingPath.cs
- GifBitmapEncoder.cs
- XmlDataProvider.cs
- IndexerNameAttribute.cs
- ViewCellSlot.cs
- DetailsViewCommandEventArgs.cs
- DetailsViewPageEventArgs.cs
- StaticExtensionConverter.cs
- ListControlConvertEventArgs.cs
- ResourceWriter.cs
- XmlDsigSep2000.cs
- PageCatalogPart.cs
- QueryCacheManager.cs
- CellLabel.cs
- HttpChannelFactory.cs
- Stack.cs
- DeploymentExceptionMapper.cs
- HitTestDrawingContextWalker.cs
- IndentTextWriter.cs
- TaskSchedulerException.cs