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
- HttpGetServerProtocol.cs
- SystemResourceKey.cs
- ProxyWebPartManager.cs
- ComPlusContractBehavior.cs
- DiscreteKeyFrames.cs
- SmtpSection.cs
- Configuration.cs
- DynamicScriptObject.cs
- TagMapCollection.cs
- ContextBase.cs
- RunWorkerCompletedEventArgs.cs
- ConstraintStruct.cs
- HttpCapabilitiesSectionHandler.cs
- AnimatedTypeHelpers.cs
- WindowsBrush.cs
- SHA384Managed.cs
- Converter.cs
- AnnotationAdorner.cs
- ValidatingPropertiesEventArgs.cs
- CryptoHelper.cs
- DataGridViewCellValueEventArgs.cs
- MediaPlayerState.cs
- GPRECT.cs
- TreeSet.cs
- Models.cs
- NoPersistScope.cs
- OrderByBuilder.cs
- TableRow.cs
- ContextMenuStrip.cs
- TabControl.cs
- NavigationExpr.cs
- PkcsMisc.cs
- DocumentSequence.cs
- OpenTypeLayoutCache.cs
- ReferencedCategoriesDocument.cs
- DataSpaceManager.cs
- XmlSignificantWhitespace.cs
- ConversionContext.cs
- TypedReference.cs
- AnnotationMap.cs
- PriorityBinding.cs
- ConfigurationManagerHelperFactory.cs
- ErrorWebPart.cs
- ConstraintManager.cs
- SecurityPolicyVersion.cs
- DataGridPreparingCellForEditEventArgs.cs
- FilterQuery.cs
- ApplicationFileParser.cs
- BrowsableAttribute.cs
- InternalCache.cs
- ClientConfigurationSystem.cs
- WebAdminConfigurationHelper.cs
- DesignerView.xaml.cs
- smtpconnection.cs
- GridViewColumnHeader.cs
- ActivityScheduledQuery.cs
- DataGridViewUtilities.cs
- ExceptionHandlerDesigner.cs
- CodeDomSerializerException.cs
- EpmSyndicationContentDeSerializer.cs
- CommentAction.cs
- XmlParserContext.cs
- ComplexBindingPropertiesAttribute.cs
- CounterSet.cs
- serverconfig.cs
- GridViewColumn.cs
- Stacktrace.cs
- TypeSystem.cs
- DesignerSerializationOptionsAttribute.cs
- EventRouteFactory.cs
- IndexOutOfRangeException.cs
- BamlLocalizerErrorNotifyEventArgs.cs
- CounterCreationData.cs
- TrackingMemoryStream.cs
- ContentPresenter.cs
- StorageEndPropertyMapping.cs
- WebPartEventArgs.cs
- ClientSettingsStore.cs
- SelectionChangedEventArgs.cs
- DebugView.cs
- ComponentDispatcher.cs
- DropDownList.cs
- ControlTemplate.cs
- XmlCharType.cs
- StringStorage.cs
- ConditionValidator.cs
- RuntimeHandles.cs
- SqlXml.cs
- Floater.cs
- NetworkInformationException.cs
- DataGridViewCellConverter.cs
- XmlChildEnumerator.cs
- XamlDesignerSerializationManager.cs
- EditableRegion.cs
- UserInitiatedRoutedEventPermissionAttribute.cs
- TimeSpanParse.cs
- BoundColumn.cs
- TableProviderWrapper.cs
- SmtpSection.cs
- TreeView.cs