Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / NetFx35 / System.ServiceModel.Web / System / Runtime / Serialization / Json / JsonXmlDataContract.cs / 1 / 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.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- DetailsViewInsertedEventArgs.cs
- PlatformCulture.cs
- WebPartEditVerb.cs
- RegionData.cs
- StrongNameUtility.cs
- JoinGraph.cs
- CookieParameter.cs
- XmlSchemaChoice.cs
- ServiceModelReg.cs
- FormsAuthenticationCredentials.cs
- IndependentAnimationStorage.cs
- OracleRowUpdatingEventArgs.cs
- CacheOutputQuery.cs
- WebPartMenuStyle.cs
- SQLChars.cs
- HashStream.cs
- ScriptReferenceBase.cs
- XmlSchemaComplexContentRestriction.cs
- ValidationSummary.cs
- AssemblyAttributesGoHere.cs
- WasHttpModulesInstallComponent.cs
- Column.cs
- SettingsProperty.cs
- AtomicFile.cs
- ChameleonKey.cs
- SingleAnimationBase.cs
- ExtendedPropertyCollection.cs
- ScrollChrome.cs
- WebBrowserPermission.cs
- ToolStripEditorManager.cs
- ObsoleteAttribute.cs
- DbgCompiler.cs
- IDictionary.cs
- BuildProviderAppliesToAttribute.cs
- XmlSchemaComplexType.cs
- XmlEncodedRawTextWriter.cs
- RegexCompilationInfo.cs
- ZoneLinkButton.cs
- AlternateViewCollection.cs
- SendKeys.cs
- XmlHelper.cs
- QilXmlWriter.cs
- RowVisual.cs
- XamlFrame.cs
- UidPropertyAttribute.cs
- CommonProperties.cs
- WebBrowserContainer.cs
- LayoutUtils.cs
- Operator.cs
- SerialPort.cs
- ProxyWebPartManagerDesigner.cs
- RSAOAEPKeyExchangeDeformatter.cs
- StringInfo.cs
- WebDescriptionAttribute.cs
- SafeFindHandle.cs
- StreamUpdate.cs
- localization.cs
- RuntimeComponentFilter.cs
- BinaryFormatterWriter.cs
- Rijndael.cs
- QueueProcessor.cs
- SmiRequestExecutor.cs
- WCFServiceClientProxyGenerator.cs
- MasterPageCodeDomTreeGenerator.cs
- PackagingUtilities.cs
- DialogResultConverter.cs
- GeneralTransform.cs
- MultiView.cs
- ComMethodElementCollection.cs
- PrintPreviewControl.cs
- ClientFormsIdentity.cs
- LOSFormatter.cs
- ListViewItem.cs
- BamlResourceSerializer.cs
- SelectionPatternIdentifiers.cs
- TimeoutValidationAttribute.cs
- WindowsToolbar.cs
- PrinterUnitConvert.cs
- StringExpressionSet.cs
- GeneralTransformCollection.cs
- ProvidersHelper.cs
- HttpPostClientProtocol.cs
- CancellationTokenSource.cs
- SystemThemeKey.cs
- SamlAssertionKeyIdentifierClause.cs
- BookmarkInfo.cs
- StateMachineSubscriptionManager.cs
- DataGridTableCollection.cs
- WorkflowWebHostingModule.cs
- ContextQuery.cs
- Clipboard.cs
- HtmlWindow.cs
- ListView.cs
- XmlSchemaInclude.cs
- BaseCollection.cs
- XPathDocumentBuilder.cs
- BitmapPalette.cs
- ArraySegment.cs
- GenerateScriptTypeAttribute.cs
- ToolStripOverflowButton.cs