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
- DrawListViewItemEventArgs.cs
- GridView.cs
- BaseParser.cs
- IndentedTextWriter.cs
- TreeNodeBindingCollection.cs
- ObjectDataSourceSelectingEventArgs.cs
- BypassElement.cs
- CodeTypeReferenceExpression.cs
- HttpStreamXmlDictionaryWriter.cs
- EncodingFallbackAwareXmlTextWriter.cs
- Privilege.cs
- SetUserPreferenceRequest.cs
- InplaceBitmapMetadataWriter.cs
- ClearCollection.cs
- LineServicesCallbacks.cs
- MissingFieldException.cs
- ToolStripManager.cs
- RegexRunnerFactory.cs
- safemediahandle.cs
- SvcFileManager.cs
- EncoderNLS.cs
- WebException.cs
- MeasurementDCInfo.cs
- DataGridViewRowHeightInfoNeededEventArgs.cs
- XmlElementList.cs
- SqlTrackingService.cs
- ReflectionUtil.cs
- DataGridViewCellFormattingEventArgs.cs
- RuntimeIdentifierPropertyAttribute.cs
- ContainerSelectorActiveEvent.cs
- WebUtil.cs
- ISessionStateStore.cs
- Internal.cs
- RemoteHelper.cs
- BufferedWebEventProvider.cs
- DesignerActionTextItem.cs
- QuotedPairReader.cs
- PagedDataSource.cs
- Activity.cs
- ScriptManagerProxy.cs
- TabControlAutomationPeer.cs
- Transform3DCollection.cs
- ComplexLine.cs
- PeerPresenceInfo.cs
- InputLanguageManager.cs
- OleAutBinder.cs
- TemplateControlBuildProvider.cs
- Component.cs
- MetadataUtilsSmi.cs
- Label.cs
- NotImplementedException.cs
- JobInputBins.cs
- xsdvalidator.cs
- ImportRequest.cs
- CalendarAutoFormat.cs
- XmlILCommand.cs
- ContainsRowNumberChecker.cs
- XmlnsDefinitionAttribute.cs
- NumberSubstitution.cs
- SoapObjectInfo.cs
- MemoryFailPoint.cs
- SqlConnectionPoolGroupProviderInfo.cs
- ViewPort3D.cs
- FindResponse.cs
- UInt16.cs
- CodeObjectCreateExpression.cs
- ToolConsole.cs
- SelectionRangeConverter.cs
- SizeConverter.cs
- StrongNameKeyPair.cs
- XMLSchema.cs
- Message.cs
- CodeAttributeDeclarationCollection.cs
- DayRenderEvent.cs
- InvalidOperationException.cs
- DatatypeImplementation.cs
- RowToFieldTransformer.cs
- HttpListenerRequest.cs
- CompositeTypefaceMetrics.cs
- TableCell.cs
- SchemaImporter.cs
- UrlMappingsSection.cs
- MouseButton.cs
- TextTreeExtractElementUndoUnit.cs
- GenericPrincipal.cs
- TableDesigner.cs
- Hyperlink.cs
- FunctionNode.cs
- AdapterDictionary.cs
- Splitter.cs
- Matrix.cs
- CompositeScriptReference.cs
- PageBuildProvider.cs
- UriWriter.cs
- BCryptNative.cs
- SqlCachedBuffer.cs
- ClientScriptManager.cs
- ProcessModelInfo.cs
- PageSettings.cs
- MarkupObject.cs