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
- CompatibleComparer.cs
- EncoderParameters.cs
- IdentityNotMappedException.cs
- Compress.cs
- RoleExceptions.cs
- TextParagraphCache.cs
- ResolveResponse.cs
- BaseComponentEditor.cs
- SystemResourceHost.cs
- XmlSignatureProperties.cs
- SamlNameIdentifierClaimResource.cs
- DataGridClipboardHelper.cs
- ArrayExtension.cs
- VerticalConnector.xaml.cs
- SiteMembershipCondition.cs
- XPathNodePointer.cs
- DetailsViewDeleteEventArgs.cs
- TriState.cs
- PeerInvitationResponse.cs
- BridgeDataRecord.cs
- QueryRewriter.cs
- DataGridViewCellPaintingEventArgs.cs
- SymbolEqualComparer.cs
- SmtpReplyReaderFactory.cs
- XmlUtilWriter.cs
- DeclaredTypeElementCollection.cs
- ChangeProcessor.cs
- Grant.cs
- WebPartsPersonalization.cs
- DataContractSerializer.cs
- InputLanguage.cs
- PropertyInfoSet.cs
- SoundPlayerAction.cs
- SQLResource.cs
- SafeCryptoHandles.cs
- VectorAnimationUsingKeyFrames.cs
- XPathPatternBuilder.cs
- URLIdentityPermission.cs
- SystemUnicastIPAddressInformation.cs
- HyperlinkAutomationPeer.cs
- DataTableMappingCollection.cs
- BaseTemplateBuildProvider.cs
- _UncName.cs
- FigureParaClient.cs
- HttpResponse.cs
- BookmarkScope.cs
- Literal.cs
- SqlDataSourceCommandEventArgs.cs
- SrgsElementList.cs
- EmptyCollection.cs
- MetadataItem.cs
- FormsAuthenticationCredentials.cs
- ConfigurationSectionGroup.cs
- DictionaryEntry.cs
- ProfileServiceManager.cs
- PrefixHandle.cs
- Control.cs
- XmlMemberMapping.cs
- WorkflowInstanceExtensionManager.cs
- InstancePersistenceException.cs
- ErrorHandlingReceiver.cs
- DispatchChannelSink.cs
- CheckBox.cs
- ThumbAutomationPeer.cs
- FixedDocumentSequencePaginator.cs
- CopyNamespacesAction.cs
- PersonalizationProvider.cs
- ProcessManager.cs
- ListBox.cs
- StaticTextPointer.cs
- EntityDataSourceDataSelectionPanel.designer.cs
- OSFeature.cs
- Link.cs
- HttpCacheParams.cs
- CommentGlyph.cs
- AddInProcess.cs
- ImageClickEventArgs.cs
- RowTypePropertyElement.cs
- infer.cs
- WorkflowQueueInfo.cs
- MsmqChannelFactoryBase.cs
- PageRequestManager.cs
- SafeFileMappingHandle.cs
- ServiceOperationDetailViewControl.cs
- TextRange.cs
- HMAC.cs
- XmlTypeAttribute.cs
- LineUtil.cs
- CodeGotoStatement.cs
- NativeMethodsOther.cs
- TreeNodeCollectionEditor.cs
- SchemaComplexType.cs
- DataGridCellClipboardEventArgs.cs
- XamlToRtfWriter.cs
- TraversalRequest.cs
- AuthenticationModuleElementCollection.cs
- SemaphoreFullException.cs
- PingOptions.cs
- PersonalizationEntry.cs
- MetadataItem_Static.cs