Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / NetFx35 / System.ServiceModel.Web / System / Runtime / Serialization / Json / JsonXmlDataContract.cs / 1 / 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. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- XmlDocument.cs
- CachedBitmap.cs
- AdapterDictionary.cs
- RuleInfoComparer.cs
- SafeTokenHandle.cs
- ReversePositionQuery.cs
- PrinterResolution.cs
- TrackingRecordPreFilter.cs
- QueryExecutionOption.cs
- ParentQuery.cs
- Rfc4050KeyFormatter.cs
- WebConfigurationHostFileChange.cs
- HostingMessageProperty.cs
- LockedActivityGlyph.cs
- DateTimeEditor.cs
- ContourSegment.cs
- NativeMethods.cs
- LogicalCallContext.cs
- TimelineCollection.cs
- AliasedSlot.cs
- Int16AnimationBase.cs
- PageThemeBuildProvider.cs
- CompletionProxy.cs
- QilValidationVisitor.cs
- ExpandSegmentCollection.cs
- ProcessDesigner.cs
- TypeConstant.cs
- FixedFindEngine.cs
- BooleanAnimationUsingKeyFrames.cs
- ListViewInsertionMark.cs
- ImagingCache.cs
- TraceSection.cs
- Exceptions.cs
- RoutedPropertyChangedEventArgs.cs
- ReaderOutput.cs
- DataGridViewCellStyleContentChangedEventArgs.cs
- CompoundFileIOPermission.cs
- ValidatorCollection.cs
- ReadOnlyDictionary.cs
- HostedTransportConfigurationManager.cs
- WCFServiceClientProxyGenerator.cs
- VisualStyleTypesAndProperties.cs
- ConfigurationValidatorAttribute.cs
- CmsInterop.cs
- CharAnimationUsingKeyFrames.cs
- SelectionList.cs
- DescriptionAttribute.cs
- TrailingSpaceComparer.cs
- XmlEntityReference.cs
- ImageField.cs
- TypeUtil.cs
- ResXResourceReader.cs
- UserControl.cs
- ClientApiGenerator.cs
- ScriptDescriptor.cs
- login.cs
- HttpRequestBase.cs
- UnsignedPublishLicense.cs
- AnimationTimeline.cs
- DetailsViewRowCollection.cs
- IDQuery.cs
- OverflowException.cs
- HtmlShimManager.cs
- SqlCacheDependencySection.cs
- DropShadowEffect.cs
- MetadataItemCollectionFactory.cs
- ButtonFlatAdapter.cs
- RuntimeEnvironment.cs
- Literal.cs
- UpWmlMobileTextWriter.cs
- XsltLoader.cs
- MemoryFailPoint.cs
- LogLogRecord.cs
- RightNameExpirationInfoPair.cs
- TraceEventCache.cs
- ExpressionBindingCollection.cs
- XmlTextReaderImplHelpers.cs
- ButtonBaseAdapter.cs
- NCryptSafeHandles.cs
- PropertyConverter.cs
- RowToFieldTransformer.cs
- KeyProperty.cs
- AvtEvent.cs
- CoordinationService.cs
- EditorZone.cs
- DataGridClipboardHelper.cs
- ExtensionDataReader.cs
- AddressAccessDeniedException.cs
- CultureData.cs
- TrustLevelCollection.cs
- XmlSerializerNamespaces.cs
- WebPartTransformerAttribute.cs
- XmlDataLoader.cs
- SelectionGlyphBase.cs
- ScrollItemPattern.cs
- RegexCompiler.cs
- UserControlDocumentDesigner.cs
- ConfigXmlCDataSection.cs
- InstanceCreationEditor.cs
- ConstraintCollection.cs