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
- ValidatorUtils.cs
- EntityDataSourceDesigner.cs
- PageThemeCodeDomTreeGenerator.cs
- Ray3DHitTestResult.cs
- SerializationTrace.cs
- HelpProvider.cs
- NameTable.cs
- ImageInfo.cs
- TextRangeEdit.cs
- Timer.cs
- DragDrop.cs
- RemoteDebugger.cs
- SafeNativeMethods.cs
- CompareValidator.cs
- IndexedGlyphRun.cs
- MediaElementAutomationPeer.cs
- SqlColumnizer.cs
- WindowAutomationPeer.cs
- OdbcError.cs
- FontConverter.cs
- SerialReceived.cs
- Ticks.cs
- MonitoringDescriptionAttribute.cs
- HttpAsyncResult.cs
- ProxyManager.cs
- LineMetrics.cs
- ImageIndexConverter.cs
- EpmSourcePathSegment.cs
- WizardStepBase.cs
- LinearQuaternionKeyFrame.cs
- TcpWorkerProcess.cs
- WinFormsUtils.cs
- RegisteredHiddenField.cs
- SubpageParaClient.cs
- ClientApiGenerator.cs
- PathStreamGeometryContext.cs
- SqlDataSourceSelectingEventArgs.cs
- TraceContext.cs
- PersistencePipeline.cs
- XPathBuilder.cs
- ChangeProcessor.cs
- DataGridViewCellStateChangedEventArgs.cs
- DataKeyCollection.cs
- CngAlgorithmGroup.cs
- StreamingContext.cs
- CodeArrayCreateExpression.cs
- ObjectMemberMapping.cs
- CaseInsensitiveHashCodeProvider.cs
- Path.cs
- _TransmitFileOverlappedAsyncResult.cs
- WindowsListViewScroll.cs
- OrderByBuilder.cs
- RequestCache.cs
- SchemaImporterExtensionElement.cs
- XmlCharCheckingReader.cs
- XPathDocument.cs
- ProcessModuleCollection.cs
- HttpWebResponse.cs
- KeyValueSerializer.cs
- MostlySingletonList.cs
- Wildcard.cs
- ChangeNode.cs
- Material.cs
- FaultDescription.cs
- GroupBox.cs
- AttachedAnnotationChangedEventArgs.cs
- DesignColumnCollection.cs
- OletxTransactionHeader.cs
- QueryStringParameter.cs
- SqlConnectionManager.cs
- XmlSecureResolver.cs
- SqlReferenceCollection.cs
- HttpBufferlessInputStream.cs
- PaintValueEventArgs.cs
- _NegotiateClient.cs
- SizeConverter.cs
- SessionEndingEventArgs.cs
- SymbolPair.cs
- Soap12ServerProtocol.cs
- CssClassPropertyAttribute.cs
- HwndHost.cs
- ArraySegment.cs
- NetStream.cs
- EncodingFallbackAwareXmlTextWriter.cs
- SmtpSpecifiedPickupDirectoryElement.cs
- ResourceExpressionBuilder.cs
- DateTimeParse.cs
- PageWrapper.cs
- XmlSchemaSimpleContent.cs
- DesignerActionPropertyItem.cs
- SimpleApplicationHost.cs
- ProjectionPathBuilder.cs
- XmlDataSourceNodeDescriptor.cs
- Viewport3DVisual.cs
- OutputScopeManager.cs
- ComplusEndpointConfigContainer.cs
- ScriptRegistrationManager.cs
- DataGridViewRowEventArgs.cs
- ColumnHeader.cs
- LabelAutomationPeer.cs