Code:
/ 4.0 / 4.0 / untmp / 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.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- MetadataAssemblyHelper.cs
- RewritingSimplifier.cs
- SchemaNamespaceManager.cs
- TreeBuilderBamlTranslator.cs
- CheckStoreFileValidityRequest.cs
- DomainUpDown.cs
- WindowsScrollBarBits.cs
- MenuItemStyleCollectionEditor.cs
- WebPartDisplayModeEventArgs.cs
- JobPageOrder.cs
- UtilityExtension.cs
- SystemNetworkInterface.cs
- DataGridItemAutomationPeer.cs
- FunctionImportMapping.cs
- StateBag.cs
- FlowDocumentReaderAutomationPeer.cs
- State.cs
- SmtpFailedRecipientsException.cs
- EntityDataSourceViewSchema.cs
- ModelFunctionTypeElement.cs
- PasswordTextNavigator.cs
- RadialGradientBrush.cs
- UIElementHelper.cs
- ConfigurationManagerHelper.cs
- ItemCollection.cs
- XmlIlGenerator.cs
- XmlSchemaObjectCollection.cs
- dbenumerator.cs
- Symbol.cs
- PageParser.cs
- XmlQueryTypeFactory.cs
- BaseDataList.cs
- SiteMapHierarchicalDataSourceView.cs
- WindowsFormsHost.cs
- PluralizationServiceUtil.cs
- XmlQualifiedName.cs
- TypeReference.cs
- Stacktrace.cs
- GridViewRowCollection.cs
- SiteMapSection.cs
- elementinformation.cs
- SortKey.cs
- SqlResolver.cs
- SessionPageStateSection.cs
- MSHTMLHostUtil.cs
- ClientConfigPaths.cs
- ToolStripContentPanelDesigner.cs
- FixedDocumentPaginator.cs
- DefaultCommandConverter.cs
- UnsafeNativeMethods.cs
- Internal.cs
- WindowsScroll.cs
- XmlSerializationGeneratedCode.cs
- FixedDocumentPaginator.cs
- WaveHeader.cs
- EntityClassGenerator.cs
- XmlNodeWriter.cs
- InstanceDataCollection.cs
- MarginsConverter.cs
- PerformanceCountersBase.cs
- ToolStripDropDownItemDesigner.cs
- ParameterCollectionEditor.cs
- Condition.cs
- SqlUserDefinedTypeAttribute.cs
- RequestQueryProcessor.cs
- SafeArrayRankMismatchException.cs
- SemaphoreSecurity.cs
- EmulateRecognizeCompletedEventArgs.cs
- ColorAnimationBase.cs
- PathFigureCollection.cs
- SafeCertificateContext.cs
- SystemIPGlobalProperties.cs
- DataViewManagerListItemTypeDescriptor.cs
- AutomationProperties.cs
- InputBinder.cs
- SoapAttributeOverrides.cs
- GradientStop.cs
- WorkflowInstance.cs
- GacUtil.cs
- Cloud.cs
- HijriCalendar.cs
- HttpCachePolicyBase.cs
- IconHelper.cs
- DataService.cs
- RealizationDrawingContextWalker.cs
- DataSourceXmlElementAttribute.cs
- XPathEmptyIterator.cs
- Identity.cs
- LoaderAllocator.cs
- Camera.cs
- IfElseDesigner.xaml.cs
- ButtonBase.cs
- HttpRawResponse.cs
- XmlSchemaSequence.cs
- TriggerActionCollection.cs
- RegexInterpreter.cs
- EntryPointNotFoundException.cs
- TextPattern.cs
- SafeThemeHandle.cs
- BamlTreeMap.cs