Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / NetFx35 / System.ServiceModel.Web / System / Runtime / Serialization / Json / JsonXmlDataContract.cs / 1 / 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.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- TaskbarItemInfo.cs
- JournalNavigationScope.cs
- SessionSymmetricTransportSecurityProtocolFactory.cs
- TraceLevelStore.cs
- EntityException.cs
- ProfileParameter.cs
- SourceElementsCollection.cs
- IndexedString.cs
- DataSourceXmlSubItemAttribute.cs
- SQLInt32.cs
- CompilerParameters.cs
- CacheManager.cs
- FocusChangedEventArgs.cs
- BasicExpandProvider.cs
- EdmProviderManifest.cs
- DBDataPermissionAttribute.cs
- FileLoadException.cs
- XmlSchemaDocumentation.cs
- DescendantQuery.cs
- ManagementObjectCollection.cs
- XmlReaderSettings.cs
- MimeParameter.cs
- MethodCallTranslator.cs
- HashHelper.cs
- SelectionEditingBehavior.cs
- FastEncoder.cs
- DeleteBookmarkScope.cs
- WorkflowServiceNamespace.cs
- EasingKeyFrames.cs
- Listbox.cs
- ConfigurationCollectionAttribute.cs
- BidPrivateBase.cs
- DateTimeOffset.cs
- GrammarBuilderRuleRef.cs
- XD.cs
- ItemList.cs
- DriveInfo.cs
- BuildProvider.cs
- EdgeProfileValidation.cs
- ClrPerspective.cs
- TextAdaptor.cs
- CellNormalizer.cs
- WindowsTokenRoleProvider.cs
- BindUriHelper.cs
- ToolBarOverflowPanel.cs
- BinaryNode.cs
- HostingEnvironmentSection.cs
- Context.cs
- DocumentCollection.cs
- IIS7UserPrincipal.cs
- PageParserFilter.cs
- FormClosingEvent.cs
- MultiBinding.cs
- DrawingContextWalker.cs
- ModuleBuilderData.cs
- TextStore.cs
- ObjectViewListener.cs
- ImportContext.cs
- XmlSchemaValidator.cs
- IQueryable.cs
- CodeTypeMemberCollection.cs
- XmlLoader.cs
- RowToParametersTransformer.cs
- XpsFilter.cs
- PackageProperties.cs
- FormsAuthenticationUserCollection.cs
- Viewport3DVisual.cs
- SiteIdentityPermission.cs
- Facet.cs
- AsyncCompletedEventArgs.cs
- OpCodes.cs
- ExternalCalls.cs
- ImageBrush.cs
- DelegatedStream.cs
- WebPartDescription.cs
- XmlWrappingReader.cs
- ResourceIDHelper.cs
- VariableQuery.cs
- Image.cs
- XDRSchema.cs
- StringReader.cs
- FormsIdentity.cs
- HtmlInputRadioButton.cs
- MetaModel.cs
- UnknownBitmapEncoder.cs
- WebPartDescriptionCollection.cs
- Compress.cs
- StreamingContext.cs
- NullReferenceException.cs
- RegisteredHiddenField.cs
- TemplateBuilder.cs
- COM2Properties.cs
- FontDriver.cs
- PolyBezierSegmentFigureLogic.cs
- MachineKeyValidationConverter.cs
- AdPostCacheSubstitution.cs
- RadialGradientBrush.cs
- NativeMethodsOther.cs
- WsrmTraceRecord.cs
- FileSecurity.cs