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
- XsdDuration.cs
- ObjectDataSourceStatusEventArgs.cs
- Menu.cs
- RangeBaseAutomationPeer.cs
- CultureMapper.cs
- SiteMapNodeItemEventArgs.cs
- VersionValidator.cs
- PolyLineSegmentFigureLogic.cs
- TargetInvocationException.cs
- MessageDesigner.cs
- ComplexBindingPropertiesAttribute.cs
- FilterException.cs
- UserValidatedEventArgs.cs
- AsmxEndpointPickerExtension.cs
- FormatStringEditor.cs
- HostSecurityManager.cs
- MeshGeometry3D.cs
- DynamicMethod.cs
- GPPOINT.cs
- DNS.cs
- TraceSection.cs
- Pens.cs
- XmlArrayItemAttribute.cs
- DataStreams.cs
- DBAsyncResult.cs
- DataRelation.cs
- DoubleAnimationUsingPath.cs
- XmlSchemaImporter.cs
- UIElementIsland.cs
- BufferedWebEventProvider.cs
- ECDsa.cs
- CodeDirectionExpression.cs
- NumericExpr.cs
- MergeLocalizationDirectives.cs
- ObjectViewQueryResultData.cs
- XPathAncestorIterator.cs
- MessageQueueInstaller.cs
- GZipDecoder.cs
- HandlerMappingMemo.cs
- UrlAuthFailedErrorFormatter.cs
- ImageBrush.cs
- StylusSystemGestureEventArgs.cs
- ProfileService.cs
- DataServiceConfiguration.cs
- ToolStripContentPanelRenderEventArgs.cs
- NotifyIcon.cs
- NetMsmqSecurityMode.cs
- WebPartAuthorizationEventArgs.cs
- BinaryParser.cs
- IList.cs
- Renderer.cs
- PropertyAccessVisitor.cs
- WebScriptEnablingBehavior.cs
- OutputWindow.cs
- NumericUpDownAcceleration.cs
- XPathBinder.cs
- XLinq.cs
- CacheDependency.cs
- _TransmitFileOverlappedAsyncResult.cs
- RequestUriProcessor.cs
- PerformanceCounterPermissionEntry.cs
- Certificate.cs
- PageStatePersister.cs
- TcpChannelListener.cs
- StringFormat.cs
- LineGeometry.cs
- UICuesEvent.cs
- WebBrowserNavigatedEventHandler.cs
- NativeMethods.cs
- EntityDataSourceChangedEventArgs.cs
- EditCommandColumn.cs
- ManifestResourceInfo.cs
- XMLSchema.cs
- ExceptQueryOperator.cs
- TextElement.cs
- DoubleStorage.cs
- RelOps.cs
- DrawingAttributeSerializer.cs
- AsymmetricKeyExchangeDeformatter.cs
- SmiEventSink.cs
- AutomationElement.cs
- AccessDataSourceWizardForm.cs
- AsymmetricKeyExchangeDeformatter.cs
- TreeViewEvent.cs
- Char.cs
- DataGridViewLinkCell.cs
- StyleTypedPropertyAttribute.cs
- xmlfixedPageInfo.cs
- ObjectCache.cs
- listitem.cs
- PriorityBindingExpression.cs
- DataGridViewImageCell.cs
- DelegateSerializationHolder.cs
- Expander.cs
- SchemaHelper.cs
- ClientCultureInfo.cs
- Transform.cs
- SrgsRuleRef.cs
- IntSecurity.cs
- DataGridViewImageCell.cs