Code:
/ 4.0 / 4.0 / 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);
}
List GetKnownTypesFromContext(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.
//---------------------------------------------------------------
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);
}
List GetKnownTypesFromContext(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
- ToolStripButton.cs
- DrawingGroup.cs
- ApplicationSettingsBase.cs
- ConstructorNeedsTagAttribute.cs
- AxisAngleRotation3D.cs
- LabelTarget.cs
- ToolTip.cs
- Win32Exception.cs
- SerializerWriterEventHandlers.cs
- EditorPart.cs
- SpoolingTaskBase.cs
- SizeF.cs
- ContractMethodParameterInfo.cs
- IsolatedStorage.cs
- WindowsButton.cs
- TileBrush.cs
- CodeArrayCreateExpression.cs
- PrintDocument.cs
- DataGridHeaderBorder.cs
- WebServiceReceive.cs
- Matrix3DStack.cs
- FixedSOMLineRanges.cs
- PtsCache.cs
- TimeSpanFormat.cs
- GeneralTransform3DGroup.cs
- SqlUnionizer.cs
- ClientCredentialsElement.cs
- CompositeDataBoundControl.cs
- QuaternionAnimation.cs
- SmtpSpecifiedPickupDirectoryElement.cs
- HttpFileCollection.cs
- SiteMapHierarchicalDataSourceView.cs
- RegionInfo.cs
- DataPager.cs
- ScrollChrome.cs
- VisualProxy.cs
- ClientConfigPaths.cs
- SimpleLine.cs
- ShapingEngine.cs
- Stack.cs
- JulianCalendar.cs
- XPathBinder.cs
- SizeConverter.cs
- DataGridViewColumnConverter.cs
- TypeDescriptionProviderAttribute.cs
- EventMap.cs
- SQLInt16Storage.cs
- MenuStrip.cs
- DataGridViewColumnDesigner.cs
- HandlerBase.cs
- RequestSecurityTokenForGetBrowserToken.cs
- HttpErrorTraceRecord.cs
- DependencyObjectProvider.cs
- DnsElement.cs
- AppDomainManager.cs
- Point3DAnimationUsingKeyFrames.cs
- StateMachineExecutionState.cs
- Stack.cs
- AdapterUtil.cs
- RunWorkerCompletedEventArgs.cs
- BinaryMethodMessage.cs
- XmlSchema.cs
- DataGridViewTextBoxEditingControl.cs
- DbConnectionHelper.cs
- MenuAdapter.cs
- SHA256Managed.cs
- wpf-etw.cs
- ObjectItemCollectionAssemblyCacheEntry.cs
- ResourceReferenceKeyNotFoundException.cs
- XPathException.cs
- Input.cs
- Preprocessor.cs
- Configuration.cs
- TableLayoutSettingsTypeConverter.cs
- TagNameToTypeMapper.cs
- DynamicValidator.cs
- XmlSerializationWriter.cs
- ApplicationException.cs
- TypeSource.cs
- EventLogWatcher.cs
- LiteralSubsegment.cs
- ServiceHttpModule.cs
- ClientTargetSection.cs
- MSAANativeProvider.cs
- DbProviderFactories.cs
- ConfigurationManagerHelper.cs
- XamlPoint3DCollectionSerializer.cs
- UIElementParaClient.cs
- GACMembershipCondition.cs
- SecurityTokenSpecification.cs
- DataGridViewCellLinkedList.cs
- TimeSpanConverter.cs
- ipaddressinformationcollection.cs
- DetailsViewModeEventArgs.cs
- HighlightVisual.cs
- WindowVisualStateTracker.cs
- HtmlForm.cs
- CssTextWriter.cs
- webproxy.cs
- DbConnectionOptions.cs