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
- SystemResources.cs
- EventLogPermissionAttribute.cs
- GeneralTransform3DTo2DTo3D.cs
- ExpressionHelper.cs
- RouteItem.cs
- XmlDownloadManager.cs
- xamlnodes.cs
- MessagingDescriptionAttribute.cs
- SchemaLookupTable.cs
- FileSecurity.cs
- Soap12FormatExtensions.cs
- StickyNoteHelper.cs
- XmlDictionaryWriter.cs
- FileNameEditor.cs
- CryptoApi.cs
- ReadContentAsBinaryHelper.cs
- UnsafeNetInfoNativeMethods.cs
- HtmlImage.cs
- ClientData.cs
- _TLSstream.cs
- DelegatingHeader.cs
- ImageMetadata.cs
- BindingBase.cs
- GeneralTransform3D.cs
- ActivityExecutor.cs
- UriTemplateClientFormatter.cs
- SolidColorBrush.cs
- Exceptions.cs
- TextAutomationPeer.cs
- Int32Collection.cs
- ClientRoleProvider.cs
- EncoderParameter.cs
- TextParagraph.cs
- AssociatedControlConverter.cs
- ContainerUIElement3D.cs
- PagerSettings.cs
- Image.cs
- MetadataItemCollectionFactory.cs
- TableLayoutPanel.cs
- StartFileNameEditor.cs
- ToolStripItemTextRenderEventArgs.cs
- RecognitionEventArgs.cs
- ChineseLunisolarCalendar.cs
- TextLine.cs
- DynamicQueryStringParameter.cs
- XmlDocumentViewSchema.cs
- EncodingDataItem.cs
- XpsS0ValidatingLoader.cs
- KeyValuePair.cs
- ExpandSegmentCollection.cs
- QuaternionIndependentAnimationStorage.cs
- BamlBinaryReader.cs
- HasCopySemanticsAttribute.cs
- XmlSchemaAll.cs
- ConnectionProviderAttribute.cs
- ServiceModelEnumValidator.cs
- ArrayConverter.cs
- followingquery.cs
- PassportAuthentication.cs
- DataSpaceManager.cs
- SelectionService.cs
- InternalRelationshipCollection.cs
- XsltSettings.cs
- Container.cs
- CharConverter.cs
- FormatControl.cs
- Wizard.cs
- TimersDescriptionAttribute.cs
- Propagator.cs
- SiteMembershipCondition.cs
- ApplicationGesture.cs
- XDRSchema.cs
- _ConnectionGroup.cs
- Help.cs
- PolicyException.cs
- WindowsStartMenu.cs
- TimersDescriptionAttribute.cs
- ProjectionAnalyzer.cs
- Pen.cs
- EntityContainerEntitySet.cs
- PerformanceCounterPermissionEntry.cs
- EventRoute.cs
- ExtendedProperty.cs
- ToolStripSeparator.cs
- MenuItemStyleCollection.cs
- LinkLabel.cs
- ErrorProvider.cs
- ObjectNotFoundException.cs
- ConnectionStringSettingsCollection.cs
- ScriptControlManager.cs
- FontWeights.cs
- ContentElement.cs
- IncrementalCompileAnalyzer.cs
- AuthenticodeSignatureInformation.cs
- SignatureGenerator.cs
- SQLDateTimeStorage.cs
- DataProtection.cs
- FrameworkEventSource.cs
- PagedDataSource.cs
- TimersDescriptionAttribute.cs