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
- AsymmetricSignatureFormatter.cs
- TextRunProperties.cs
- FlowPanelDesigner.cs
- SelfIssuedAuthAsymmetricKey.cs
- DefaultClaimSet.cs
- RepeatBehaviorConverter.cs
- ActivityLocationReferenceEnvironment.cs
- HandleCollector.cs
- MsmqInputChannelListenerBase.cs
- SchemaNames.cs
- ConditionalAttribute.cs
- CodeLinePragma.cs
- InfiniteIntConverter.cs
- GradientStop.cs
- OleDbParameter.cs
- TdsValueSetter.cs
- TextBoxRenderer.cs
- RenderContext.cs
- DetailsViewCommandEventArgs.cs
- Button.cs
- GenericFlowSwitchHelper.cs
- SimpleExpression.cs
- DeferrableContentConverter.cs
- WCFBuildProvider.cs
- ErrorFormatter.cs
- DataGridCellInfo.cs
- TemplateControlParser.cs
- DataComponentGenerator.cs
- CryptographicAttribute.cs
- CSharpCodeProvider.cs
- SubclassTypeValidator.cs
- BadImageFormatException.cs
- SystemIcmpV6Statistics.cs
- TextLineBreak.cs
- BuildProviderUtils.cs
- SvcFileManager.cs
- _IPv4Address.cs
- SqlCachedBuffer.cs
- CodeIndexerExpression.cs
- SectionXmlInfo.cs
- SwitchAttribute.cs
- EDesignUtil.cs
- SevenBitStream.cs
- EpmTargetTree.cs
- CapabilitiesUse.cs
- MenuItemStyle.cs
- ResourceDescriptionAttribute.cs
- ProfileEventArgs.cs
- RMEnrollmentPage1.cs
- HWStack.cs
- RIPEMD160.cs
- AutomationTextAttribute.cs
- FileDialog.cs
- BatchWriter.cs
- FontResourceCache.cs
- OleDbConnectionPoolGroupProviderInfo.cs
- CanExecuteRoutedEventArgs.cs
- ResponseStream.cs
- PrivacyNoticeElement.cs
- UIElementParagraph.cs
- XmlDomTextWriter.cs
- _OverlappedAsyncResult.cs
- ListViewCancelEventArgs.cs
- XmlArrayItemAttribute.cs
- _UncName.cs
- Paragraph.cs
- PointCollectionConverter.cs
- Brush.cs
- SourceFileInfo.cs
- XmlSchemaDatatype.cs
- GridViewCellAutomationPeer.cs
- KeyTime.cs
- MetadataCache.cs
- cache.cs
- SponsorHelper.cs
- DesignerLoader.cs
- exports.cs
- CroppedBitmap.cs
- PartBasedPackageProperties.cs
- KnownBoxes.cs
- SQLStringStorage.cs
- BinaryObjectWriter.cs
- TextFormatter.cs
- XmlSchemaExternal.cs
- Facet.cs
- DbDataRecord.cs
- ComponentChangingEvent.cs
- CornerRadiusConverter.cs
- XmlDocumentFragment.cs
- EmptyStringExpandableObjectConverter.cs
- TargetInvocationException.cs
- IgnoreDeviceFilterElement.cs
- AmbiguousMatchException.cs
- XmlSchemaGroupRef.cs
- StringConverter.cs
- DataServiceStreamResponse.cs
- GridView.cs
- CallTemplateAction.cs
- XmlSerializerAssemblyAttribute.cs
- ToolStripOverflow.cs