Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / WCF / Serialization / System / Runtime / Serialization / Json / JsonXmlDataContract.cs / 1305376 / JsonXmlDataContract.cs
//---------------------------------------------------------------- // Copyright (c) Microsoft Corporation. All rights reserved. //--------------------------------------------------------------- namespace System.Runtime.Serialization.Json { using System.Xml; using System.Collections.Generic; using System.IO; using System.Text; class JsonXmlDataContract : JsonDataContract { public JsonXmlDataContract(XmlDataContract traditionalXmlDataContract) : base(traditionalXmlDataContract) { } public override object ReadJsonValueCore(XmlReaderDelegator jsonReader, XmlObjectSerializerReadContextComplexJson context) { string xmlContent = jsonReader.ReadElementContentAsString(); DataContractSerializer dataContractSerializer = new DataContractSerializer(TraditionalDataContract.UnderlyingType, GetKnownTypesFromContext(context, (context == null) ? null : context.SerializerKnownTypeList), 1, false, false, null); // maxItemsInObjectGraph // ignoreExtensionDataObject // preserveObjectReferences // dataContractSurrogate MemoryStream memoryStream = new MemoryStream(Encoding.UTF8.GetBytes(xmlContent)); object xmlValue; XmlDictionaryReaderQuotas quotas = ((JsonReaderDelegator) jsonReader).ReaderQuotas; if (quotas == null) { xmlValue = dataContractSerializer.ReadObject(memoryStream); } else { xmlValue = dataContractSerializer.ReadObject(XmlDictionaryReader.CreateTextReader(memoryStream, quotas)); } if (context != null) { context.AddNewObject(xmlValue); } return xmlValue; } public override void WriteJsonValueCore(XmlWriterDelegator jsonWriter, object obj, XmlObjectSerializerWriteContextComplexJson context, RuntimeTypeHandle declaredTypeHandle) { DataContractSerializer dataContractSerializer = new DataContractSerializer(Type.GetTypeFromHandle(declaredTypeHandle), GetKnownTypesFromContext(context, (context == null) ? null : context.SerializerKnownTypeList), 1, false, false, null); // maxItemsInObjectGraph // ignoreExtensionDataObject // preserveObjectReferences // dataContractSurrogate MemoryStream memoryStream = new MemoryStream(); dataContractSerializer.WriteObject(memoryStream, obj); memoryStream.Position = 0; string serialized = new StreamReader(memoryStream).ReadToEnd(); jsonWriter.WriteString(serialized); } ListGetKnownTypesFromContext(XmlObjectSerializerContext context, IList serializerKnownTypeList) { List knownTypesList = new List (); if (context != null) { List stableNames = new List (); Dictionary [] entries = context.scopedKnownTypes.dataContractDictionaries; if (entries != null) { for (int i = 0; i < entries.Length; i++) { Dictionary entry = entries[i]; if (entry != null) { foreach (KeyValuePair pair in entry) { if (!stableNames.Contains(pair.Key)) { stableNames.Add(pair.Key); knownTypesList.Add(pair.Value.UnderlyingType); } } } } } if (serializerKnownTypeList != null) { knownTypesList.AddRange(serializerKnownTypeList); } } return knownTypesList; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //---------------------------------------------------------------- // Copyright (c) Microsoft Corporation. All rights reserved. //--------------------------------------------------------------- namespace System.Runtime.Serialization.Json { using System.Xml; using System.Collections.Generic; using System.IO; using System.Text; class JsonXmlDataContract : JsonDataContract { public JsonXmlDataContract(XmlDataContract traditionalXmlDataContract) : base(traditionalXmlDataContract) { } public override object ReadJsonValueCore(XmlReaderDelegator jsonReader, XmlObjectSerializerReadContextComplexJson context) { string xmlContent = jsonReader.ReadElementContentAsString(); DataContractSerializer dataContractSerializer = new DataContractSerializer(TraditionalDataContract.UnderlyingType, GetKnownTypesFromContext(context, (context == null) ? null : context.SerializerKnownTypeList), 1, false, false, null); // maxItemsInObjectGraph // ignoreExtensionDataObject // preserveObjectReferences // dataContractSurrogate MemoryStream memoryStream = new MemoryStream(Encoding.UTF8.GetBytes(xmlContent)); object xmlValue; XmlDictionaryReaderQuotas quotas = ((JsonReaderDelegator) jsonReader).ReaderQuotas; if (quotas == null) { xmlValue = dataContractSerializer.ReadObject(memoryStream); } else { xmlValue = dataContractSerializer.ReadObject(XmlDictionaryReader.CreateTextReader(memoryStream, quotas)); } if (context != null) { context.AddNewObject(xmlValue); } return xmlValue; } public override void WriteJsonValueCore(XmlWriterDelegator jsonWriter, object obj, XmlObjectSerializerWriteContextComplexJson context, RuntimeTypeHandle declaredTypeHandle) { DataContractSerializer dataContractSerializer = new DataContractSerializer(Type.GetTypeFromHandle(declaredTypeHandle), GetKnownTypesFromContext(context, (context == null) ? null : context.SerializerKnownTypeList), 1, false, false, null); // maxItemsInObjectGraph // ignoreExtensionDataObject // preserveObjectReferences // dataContractSurrogate MemoryStream memoryStream = new MemoryStream(); dataContractSerializer.WriteObject(memoryStream, obj); memoryStream.Position = 0; string serialized = new StreamReader(memoryStream).ReadToEnd(); jsonWriter.WriteString(serialized); } List GetKnownTypesFromContext(XmlObjectSerializerContext context, IList serializerKnownTypeList) { List knownTypesList = new List (); if (context != null) { List stableNames = new List (); Dictionary [] entries = context.scopedKnownTypes.dataContractDictionaries; if (entries != null) { for (int i = 0; i < entries.Length; i++) { Dictionary entry = entries[i]; if (entry != null) { foreach (KeyValuePair pair in entry) { if (!stableNames.Contains(pair.Key)) { stableNames.Add(pair.Key); knownTypesList.Add(pair.Value.UnderlyingType); } } } } } if (serializerKnownTypeList != null) { knownTypesList.AddRange(serializerKnownTypeList); } } return knownTypesList; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- SetterBaseCollection.cs
- PathTooLongException.cs
- PixelFormatConverter.cs
- AliasGenerator.cs
- HostingPreferredMapPath.cs
- PrefixHandle.cs
- FloaterBaseParagraph.cs
- mansign.cs
- RawStylusActions.cs
- CallbackDebugBehavior.cs
- Span.cs
- ApplicationSettingsBase.cs
- TextureBrush.cs
- SmiEventStream.cs
- ProviderCommandInfoUtils.cs
- TracedNativeMethods.cs
- EntitySqlQueryCacheEntry.cs
- ObjectDataSourceFilteringEventArgs.cs
- XmlException.cs
- SoapSchemaImporter.cs
- ExceptionValidationRule.cs
- MetadataUtilsSmi.cs
- PlainXmlSerializer.cs
- PageEventArgs.cs
- ProtocolElementCollection.cs
- DataServiceClientException.cs
- EventMappingSettingsCollection.cs
- Condition.cs
- ListViewGroupItemCollection.cs
- ZipIOLocalFileBlock.cs
- PresentationSource.cs
- CheckableControlBaseAdapter.cs
- WindowsStatusBar.cs
- GridItemPatternIdentifiers.cs
- AdornerHitTestResult.cs
- GridViewRow.cs
- DataPagerFieldItem.cs
- FrameworkContentElementAutomationPeer.cs
- COM2AboutBoxPropertyDescriptor.cs
- WorkflowDebuggerSteppingAttribute.cs
- VirtualDirectoryMappingCollection.cs
- WebAdminConfigurationHelper.cs
- StylusPlugInCollection.cs
- LogLogRecordEnumerator.cs
- TCPClient.cs
- ChangeInterceptorAttribute.cs
- ToolStripSystemRenderer.cs
- ThreadStaticAttribute.cs
- HttpCachePolicyElement.cs
- AddingNewEventArgs.cs
- AccessDataSourceView.cs
- SecurityManager.cs
- KeysConverter.cs
- OrderedEnumerableRowCollection.cs
- safemediahandle.cs
- ScrollableControl.cs
- LocalizableResourceBuilder.cs
- LinqDataSourceHelper.cs
- DataMisalignedException.cs
- ExpressionWriter.cs
- ModuleBuilder.cs
- MimeWriter.cs
- TreeSet.cs
- LogWriteRestartAreaAsyncResult.cs
- DrawingServices.cs
- TabItemWrapperAutomationPeer.cs
- TokenBasedSet.cs
- ObjectCloneHelper.cs
- Point.cs
- DSASignatureDeformatter.cs
- NumberFunctions.cs
- XmlSchemaSet.cs
- CalendarSelectionChangedEventArgs.cs
- SHA384Cng.cs
- GrammarBuilderWildcard.cs
- BitmapDownload.cs
- XmlKeywords.cs
- SingleAnimation.cs
- StatusBarDrawItemEvent.cs
- SafeCoTaskMem.cs
- Point4D.cs
- ToolBarTray.cs
- Literal.cs
- ShapingEngine.cs
- DataConnectionHelper.cs
- UrlMappingCollection.cs
- TableTextElementCollectionInternal.cs
- ReflectionTypeLoadException.cs
- ParallelQuery.cs
- SqlUnionizer.cs
- Dump.cs
- LogicalTreeHelper.cs
- ContractMapping.cs
- WebPartConnection.cs
- DataListItem.cs
- MetadataItemSerializer.cs
- IPPacketInformation.cs
- ZipIOExtraFieldZip64Element.cs
- DateTimeOffset.cs
- GenericTextProperties.cs