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
- ProcessThread.cs
- HttpCachePolicy.cs
- HwndTarget.cs
- LicenseContext.cs
- SpecialNameAttribute.cs
- StorageScalarPropertyMapping.cs
- TypeDescriptor.cs
- ObjectAnimationBase.cs
- StreamProxy.cs
- EventMappingSettingsCollection.cs
- TextTreeTextElementNode.cs
- WindowsListViewGroupSubsetLink.cs
- CacheChildrenQuery.cs
- ListDataHelper.cs
- RichTextBoxDesigner.cs
- CatalogZone.cs
- GridViewPageEventArgs.cs
- PageCatalogPart.cs
- ZipIOBlockManager.cs
- StorageRoot.cs
- StorageBasedPackageProperties.cs
- DataBindingHandlerAttribute.cs
- Timer.cs
- PropertyKey.cs
- MetadataCacheItem.cs
- DataGridTable.cs
- EventWaitHandle.cs
- DescendentsWalker.cs
- XmlSecureResolver.cs
- CompilerGeneratedAttribute.cs
- Scene3D.cs
- FrameworkTextComposition.cs
- AspCompat.cs
- SerializationException.cs
- InvalidFilterCriteriaException.cs
- DocumentEventArgs.cs
- WindowsFormsSectionHandler.cs
- WmlObjectListAdapter.cs
- SslStreamSecurityUpgradeProvider.cs
- XmlDeclaration.cs
- Scene3D.cs
- HijriCalendar.cs
- RegexParser.cs
- XmlQuerySequence.cs
- HeaderLabel.cs
- MarshalByRefObject.cs
- HotSpotCollection.cs
- WindowsUpDown.cs
- RoleManagerModule.cs
- TransformerConfigurationWizardBase.cs
- JsonDeserializer.cs
- EventArgs.cs
- WSSecurityTokenSerializer.cs
- ListBoxChrome.cs
- Main.cs
- RuntimeHandles.cs
- XmlnsDictionary.cs
- ValueUnavailableException.cs
- HandleTable.cs
- initElementDictionary.cs
- StylusLogic.cs
- SendActivityValidator.cs
- XamlTypeWithExplicitNamespace.cs
- NullableDoubleSumAggregationOperator.cs
- XPathDocument.cs
- EDesignUtil.cs
- MobileTextWriter.cs
- MaskedTextProvider.cs
- ImageMap.cs
- NetStream.cs
- HyperlinkAutomationPeer.cs
- RSAOAEPKeyExchangeFormatter.cs
- XmlCodeExporter.cs
- InternalConfirm.cs
- WebEventCodes.cs
- DiagnosticsConfiguration.cs
- ClientOperation.cs
- CodeSnippetStatement.cs
- StringArrayConverter.cs
- HostedAspNetEnvironment.cs
- GenericPrincipal.cs
- CultureInfoConverter.cs
- XappLauncher.cs
- IntMinMaxAggregationOperator.cs
- SourceLineInfo.cs
- Config.cs
- XmlSignatureManifest.cs
- HealthMonitoringSectionHelper.cs
- ProfileBuildProvider.cs
- DynamicILGenerator.cs
- ListViewDeleteEventArgs.cs
- StackOverflowException.cs
- TreeViewCancelEvent.cs
- SizeAnimationUsingKeyFrames.cs
- DesignTimeDataBinding.cs
- StorageAssociationSetMapping.cs
- StylusEventArgs.cs
- XmlWrappingReader.cs
- SplitterPanel.cs
- SmiEventSink_Default.cs