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
- DataGridViewAutoSizeColumnModeEventArgs.cs
- UnhandledExceptionEventArgs.cs
- MessageBodyMemberAttribute.cs
- PropertyIDSet.cs
- WindowsToolbarAsMenu.cs
- VariableQuery.cs
- ObjectConverter.cs
- SubclassTypeValidator.cs
- KeyConstraint.cs
- KeyValueConfigurationCollection.cs
- Translator.cs
- DocumentViewerAutomationPeer.cs
- AmbientValueAttribute.cs
- SchemaType.cs
- WorkflowOperationInvoker.cs
- GradientStop.cs
- CheckoutException.cs
- FontResourceCache.cs
- ToolboxItem.cs
- SqlClientFactory.cs
- ResourceWriter.cs
- FileCodeGroup.cs
- TableLayoutSettings.cs
- TraceContextEventArgs.cs
- Calendar.cs
- XmlEnumAttribute.cs
- FileDialogPermission.cs
- DbExpressionBuilder.cs
- SparseMemoryStream.cs
- grammarelement.cs
- BinaryFormatterWriter.cs
- DropDownList.cs
- ASCIIEncoding.cs
- GenericAuthenticationEventArgs.cs
- ProfilePropertyNameValidator.cs
- _StreamFramer.cs
- AnimationLayer.cs
- ChannelManager.cs
- Rijndael.cs
- HttpDictionary.cs
- SqlConnection.cs
- SHA384CryptoServiceProvider.cs
- WebPartHeaderCloseVerb.cs
- XmlComplianceUtil.cs
- WebOperationContext.cs
- HttpModuleCollection.cs
- ProgressPage.cs
- ThreadExceptionEvent.cs
- VSWCFServiceContractGenerator.cs
- APCustomTypeDescriptor.cs
- DotAtomReader.cs
- HttpAsyncResult.cs
- Marshal.cs
- HealthMonitoringSectionHelper.cs
- ParamArrayAttribute.cs
- StringOutput.cs
- Empty.cs
- NativeCppClassAttribute.cs
- CellLabel.cs
- EventMappingSettingsCollection.cs
- LiteralText.cs
- BitmapEffectRenderDataResource.cs
- ListControl.cs
- SemanticResultKey.cs
- ServiceProviders.cs
- Random.cs
- NativeMethods.cs
- ActiveDesignSurfaceEvent.cs
- ClientProxyGenerator.cs
- StatusBarAutomationPeer.cs
- SystemColorTracker.cs
- RuleSetBrowserDialog.cs
- WebRequestModulesSection.cs
- ConfigXmlComment.cs
- FixedSOMTableRow.cs
- RootBrowserWindow.cs
- HyperLinkField.cs
- DataListCommandEventArgs.cs
- XmlReaderSettings.cs
- TileBrush.cs
- StickyNote.cs
- XComponentModel.cs
- EventSource.cs
- WebEncodingValidatorAttribute.cs
- SubqueryRules.cs
- EventLogPermissionEntry.cs
- WebBrowserNavigatingEventHandler.cs
- ListBoxAutomationPeer.cs
- ReferenceService.cs
- ParserContext.cs
- AuthenticationModuleElement.cs
- SpnEndpointIdentityExtension.cs
- HashHelper.cs
- TrackingLocation.cs
- DeferredElementTreeState.cs
- ContentDisposition.cs
- SourceFileInfo.cs
- ConfigXmlElement.cs
- SerializationException.cs
- EntityDataSourceChangedEventArgs.cs