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
- SynchronizationValidator.cs
- InitializingNewItemEventArgs.cs
- DiscardableAttribute.cs
- SynchronizationContext.cs
- _BasicClient.cs
- DoubleSumAggregationOperator.cs
- DataGridViewSelectedCellCollection.cs
- XmlNode.cs
- BufferModesCollection.cs
- StreamSecurityUpgradeInitiatorBase.cs
- IndentedWriter.cs
- VSWCFServiceContractGenerator.cs
- InfocardExtendedInformationCollection.cs
- StrokeNodeOperations2.cs
- LinkedResource.cs
- TypeHelper.cs
- StateElementCollection.cs
- ToolStripOverflow.cs
- NamedPipeWorkerProcess.cs
- versioninfo.cs
- WebPermission.cs
- GridSplitterAutomationPeer.cs
- CustomValidator.cs
- FacetEnabledSchemaElement.cs
- NameValueCollection.cs
- UnknownBitmapEncoder.cs
- ObjectPropertyMapping.cs
- LogPolicy.cs
- DeferredTextReference.cs
- JsonUriDataContract.cs
- Composition.cs
- MenuItemStyle.cs
- ModelVisual3D.cs
- FixedDocumentSequencePaginator.cs
- StylusCaptureWithinProperty.cs
- FixedSOMTableRow.cs
- PathData.cs
- CodePrimitiveExpression.cs
- CodeParameterDeclarationExpression.cs
- RuntimeWrappedException.cs
- DBConcurrencyException.cs
- FigureParaClient.cs
- Int32RectConverter.cs
- HelpInfo.cs
- Light.cs
- BooleanFunctions.cs
- WebBrowserBase.cs
- ObjectListItemCollection.cs
- MenuEventArgs.cs
- XmlSchemaSimpleTypeList.cs
- CompileXomlTask.cs
- DebugHandleTracker.cs
- DomainConstraint.cs
- SQLInt16Storage.cs
- IPGlobalProperties.cs
- XmlElementList.cs
- WebPartCatalogCloseVerb.cs
- Control.cs
- DataBoundLiteralControl.cs
- WebReferenceOptions.cs
- XmlEncodedRawTextWriter.cs
- DirectoryNotFoundException.cs
- AttachedAnnotation.cs
- RemotingConfigParser.cs
- SettingsSection.cs
- ErrorFormatterPage.cs
- AuthorizationBehavior.cs
- DisableDpiAwarenessAttribute.cs
- ResourceExpressionBuilder.cs
- XsdBuildProvider.cs
- SessionStateItemCollection.cs
- SystemWebExtensionsSectionGroup.cs
- D3DImage.cs
- ListViewItemMouseHoverEvent.cs
- TypeConverterHelper.cs
- WmlPhoneCallAdapter.cs
- DispatchRuntime.cs
- HideDisabledControlAdapter.cs
- RayHitTestParameters.cs
- ThreadSafeList.cs
- WindowsComboBox.cs
- InkSerializer.cs
- ParallelTimeline.cs
- TreeNodeBindingCollection.cs
- EmbeddedMailObjectsCollection.cs
- DateTimePicker.cs
- CompositeFontFamily.cs
- EdmComplexTypeAttribute.cs
- DocumentationServerProtocol.cs
- DataControlFieldCollection.cs
- WizardStepBase.cs
- RSACryptoServiceProvider.cs
- RoleGroup.cs
- StreamInfo.cs
- AttributeCollection.cs
- ListViewPagedDataSource.cs
- PageParserFilter.cs
- XmlArrayItemAttribute.cs
- MissingSatelliteAssemblyException.cs
- TypeConverterValueSerializer.cs