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
- IndependentlyAnimatedPropertyMetadata.cs
- JsonSerializer.cs
- Literal.cs
- oledbmetadatacollectionnames.cs
- HebrewCalendar.cs
- ProfileBuildProvider.cs
- JsonStringDataContract.cs
- SoapAttributeOverrides.cs
- CommandManager.cs
- CheckBoxPopupAdapter.cs
- ToggleButtonAutomationPeer.cs
- PropertyMappingExceptionEventArgs.cs
- IProvider.cs
- StoreItemCollection.Loader.cs
- PowerStatus.cs
- XmlSerializerNamespaces.cs
- CmsInterop.cs
- MaskedTextBox.cs
- DataGridDetailsPresenter.cs
- PointAnimationUsingKeyFrames.cs
- ReflectionServiceProvider.cs
- BindingParameterCollection.cs
- XmlNode.cs
- DisplayMemberTemplateSelector.cs
- SQLBytesStorage.cs
- ZipArchive.cs
- ProcessHostConfigUtils.cs
- MissingManifestResourceException.cs
- BuilderPropertyEntry.cs
- securitycriticaldata.cs
- SafeHandle.cs
- MouseGestureConverter.cs
- BinaryExpression.cs
- RelationshipWrapper.cs
- RequestCacheValidator.cs
- OletxTransactionManager.cs
- XmlElementList.cs
- EditingScopeUndoUnit.cs
- KeyEvent.cs
- glyphs.cs
- DataObjectEventArgs.cs
- SqlError.cs
- ServiceMetadataExtension.cs
- FilteredDataSetHelper.cs
- SoapEnumAttribute.cs
- CharacterMetricsDictionary.cs
- DispatchWrapper.cs
- ArrayConverter.cs
- VScrollBar.cs
- ImageSource.cs
- ProtectedConfiguration.cs
- StrokeRenderer.cs
- AssertSection.cs
- DoubleAnimationUsingKeyFrames.cs
- SizeConverter.cs
- IgnoreFlushAndCloseStream.cs
- WindowsRichEdit.cs
- FixUp.cs
- WebPartDisplayModeCancelEventArgs.cs
- RegexParser.cs
- RequestQueryParser.cs
- HtmlInputCheckBox.cs
- FieldCollectionEditor.cs
- StateChangeEvent.cs
- GeometryModel3D.cs
- AutomationProperties.cs
- RegexMatchCollection.cs
- FontWeightConverter.cs
- ParenthesizePropertyNameAttribute.cs
- BufferedReadStream.cs
- RsaSecurityTokenAuthenticator.cs
- HelpProvider.cs
- WebPageTraceListener.cs
- PaperSize.cs
- UIInitializationException.cs
- Setter.cs
- MembershipValidatePasswordEventArgs.cs
- AuthorizationSection.cs
- AutoResizedEvent.cs
- FrameworkContentElement.cs
- MasterPageParser.cs
- FacetDescriptionElement.cs
- OrderedHashRepartitionEnumerator.cs
- SystemTcpConnection.cs
- BamlBinaryReader.cs
- XamlPoint3DCollectionSerializer.cs
- AspNetSynchronizationContext.cs
- FamilyTypeface.cs
- ColumnCollection.cs
- ModelItemImpl.cs
- DataServiceQueryException.cs
- TypeTypeConverter.cs
- ExceptionWrapper.cs
- MenuTracker.cs
- HybridCollection.cs
- TemplateControlParser.cs
- ApplicationTrust.cs
- ReadWriteSpinLock.cs
- DbDataSourceEnumerator.cs
- GcSettings.cs