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
- DataSourceView.cs
- DbCommandTree.cs
- RadioButtonPopupAdapter.cs
- SaveFileDialog.cs
- SqlRowUpdatingEvent.cs
- DataGridRowHeader.cs
- DesignerMetadata.cs
- SaveFileDialogDesigner.cs
- RightsManagementInformation.cs
- FixedSOMContainer.cs
- PeerName.cs
- FixedSOMTable.cs
- UnaryNode.cs
- CaseStatementProjectedSlot.cs
- ParserContext.cs
- BindingListCollectionView.cs
- DataRowExtensions.cs
- TypeUtils.cs
- NodeLabelEditEvent.cs
- PageAsyncTaskManager.cs
- AmbientProperties.cs
- EncryptedXml.cs
- MatrixValueSerializer.cs
- TypeConverterHelper.cs
- InternalPermissions.cs
- VerificationAttribute.cs
- IconBitmapDecoder.cs
- MimeObjectFactory.cs
- DynamicDataRouteHandler.cs
- Win32SafeHandles.cs
- BitmapSizeOptions.cs
- ADConnectionHelper.cs
- XmlDataImplementation.cs
- HttpInputStream.cs
- HttpPostClientProtocol.cs
- SocketSettings.cs
- WSTrustFeb2005.cs
- ZoneMembershipCondition.cs
- TypeSemantics.cs
- TableLayoutSettings.cs
- Menu.cs
- SystemTcpConnection.cs
- PreviewKeyDownEventArgs.cs
- CapabilitiesUse.cs
- DataDesignUtil.cs
- ProcessInputEventArgs.cs
- AttributeInfo.cs
- RegexTree.cs
- IItemContainerGenerator.cs
- BindingContext.cs
- HandlerMappingMemo.cs
- ControlCollection.cs
- RuleSettingsCollection.cs
- BamlBinaryWriter.cs
- ReadOnlyTernaryTree.cs
- ObjectStateEntry.cs
- DropDownList.cs
- Unit.cs
- AspNetSynchronizationContext.cs
- WebPartConnectionsCancelVerb.cs
- HttpChannelHelpers.cs
- Exceptions.cs
- DataServiceClientException.cs
- SimpleColumnProvider.cs
- OneWayChannelFactory.cs
- PositiveTimeSpanValidator.cs
- IPGlobalProperties.cs
- RegistryDataKey.cs
- Panel.cs
- ReadOnlyDictionary.cs
- ZipIOExtraFieldZip64Element.cs
- DetailsViewInsertedEventArgs.cs
- RetrieveVirtualItemEventArgs.cs
- TransformPatternIdentifiers.cs
- ImpersonateTokenRef.cs
- ConfigXmlWhitespace.cs
- Int32.cs
- EUCJPEncoding.cs
- AccessedThroughPropertyAttribute.cs
- ReceiveActivity.cs
- SurrogateEncoder.cs
- ComplexObject.cs
- TripleDES.cs
- BuildProvidersCompiler.cs
- XPathParser.cs
- RecordManager.cs
- CqlParser.cs
- MergeFailedEvent.cs
- bindurihelper.cs
- ColumnResult.cs
- EntityDataSourceWrapperCollection.cs
- SqlXmlStorage.cs
- BCryptSafeHandles.cs
- InputLanguageProfileNotifySink.cs
- SettingsSection.cs
- ToolStripRendererSwitcher.cs
- TextEditorCopyPaste.cs
- KeyGestureValueSerializer.cs
- StdValidatorsAndConverters.cs
- Int32Rect.cs