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); } 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. //--------------------------------------------------------------- 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
- DiagnosticsConfigurationHandler.cs
- PackageProperties.cs
- ReadOnlyDataSourceView.cs
- MimeBasePart.cs
- ControlPropertyNameConverter.cs
- NameSpaceExtractor.cs
- TemplateKeyConverter.cs
- XmlSchemaIdentityConstraint.cs
- RoleManagerEventArgs.cs
- _SingleItemRequestCache.cs
- WorkflowApplicationEventArgs.cs
- TextBoxAutoCompleteSourceConverter.cs
- SynchronizationContext.cs
- HttpCapabilitiesBase.cs
- ToolStripDropDown.cs
- InstanceNotReadyException.cs
- Misc.cs
- Brushes.cs
- ComponentGuaranteesAttribute.cs
- LiteralLink.cs
- SingleAnimationUsingKeyFrames.cs
- ObjectViewQueryResultData.cs
- PointAnimationBase.cs
- UxThemeWrapper.cs
- SHA1CryptoServiceProvider.cs
- Helper.cs
- ListView.cs
- EraserBehavior.cs
- COM2PropertyDescriptor.cs
- ExtenderControl.cs
- Themes.cs
- ParameterElement.cs
- ActionItem.cs
- LingerOption.cs
- ImagingCache.cs
- SiteMapNode.cs
- WindowsTokenRoleProvider.cs
- GestureRecognitionResult.cs
- DataGridViewCellFormattingEventArgs.cs
- Transform3DGroup.cs
- UnsafeNativeMethodsPenimc.cs
- CodeCastExpression.cs
- TreeViewCancelEvent.cs
- UpdateCommand.cs
- DbInsertCommandTree.cs
- AdornedElementPlaceholder.cs
- RadioButtonDesigner.cs
- XmlHierarchyData.cs
- StatusBarAutomationPeer.cs
- TypeSource.cs
- Message.cs
- ObjectDataSourceStatusEventArgs.cs
- SqlWebEventProvider.cs
- ProfileSettingsCollection.cs
- DebugView.cs
- TrackPointCollection.cs
- PerformanceCounterPermissionEntryCollection.cs
- NavigationWindowAutomationPeer.cs
- XmlSchemaParticle.cs
- Registry.cs
- ServiceNameCollection.cs
- Events.cs
- ResetableIterator.cs
- ProvideValueServiceProvider.cs
- MemoryFailPoint.cs
- TogglePattern.cs
- OverflowException.cs
- TypeProvider.cs
- LocatorManager.cs
- CachedPathData.cs
- SecurityTokenValidationException.cs
- ToolBarPanel.cs
- DataRowExtensions.cs
- ValidatorUtils.cs
- SQLByteStorage.cs
- HtmlTitle.cs
- DataGridCommandEventArgs.cs
- FileUtil.cs
- CompilerTypeWithParams.cs
- SynchronousReceiveBehavior.cs
- ParentQuery.cs
- COM2ExtendedUITypeEditor.cs
- DropShadowBitmapEffect.cs
- FilterQuery.cs
- SoundPlayer.cs
- DataGridViewToolTip.cs
- BrowserCapabilitiesFactoryBase.cs
- odbcmetadatacolumnnames.cs
- KeyConverter.cs
- ClientSettingsStore.cs
- FileUtil.cs
- BrowserCapabilitiesFactoryBase.cs
- ExceptionRoutedEventArgs.cs
- ExpressionParser.cs
- BindStream.cs
- WebPartVerbsEventArgs.cs
- MenuItemBindingCollection.cs
- ProgressBar.cs
- FindCriteriaApril2005.cs
- Slider.cs