2015-10-22 5 views
2

Я пытаюсь передать некоторые данные в StreamingContext DataContractSerializer, но я не могу понять, как это сделать. Вот небольшой образец моего кода:Как передать StreamingContext в DataContractSerializer?

MemoryStream stream = new MemoryStream(); 
DataContractSerializer serializer = new DataContractSerializer(typeof(OldClass)); 
serializer.WriteObject(stream, _OldClass); 
stream.Seek(0, SeekOrigin.Begin); 

serializer = new DataContractSerializer(typeof(NewClass)); 
    //here I would like to give the serializer e.g. a string as StreamingContext.Context 
_NewClass = (NewClass)serializer.ReadObject(stream); 
+0

кажется, что это не представляется возможным. См. Также http://stackoverflow.com/questions/687088/how-to-set-the-streamingcontext-for-datacontractserializer и http://stackoverflow.com/questions/6928380/how-can-i-set-the- streamingcontext-in-silverlight-datacontractserizer – Jehof

ответ

5

Вы не можете.

При использовании DataContractSerializer, StreamingContext экземпляр, передаваемый на обратные вызовы сериализации/десериализации, поступает из внутреннего XmlObjectSerializerContext.

Вот код инициализации:

internal XmlObjectSerializerContext(DataContractSerializer serializer, DataContract rootTypeDataContract, DataContractResolver dataContractResolver) 
    : this(serializer, serializer.MaxItemsInObjectGraph, new StreamingContext(StreamingContextStates.All), serializer.IgnoreExtensionDataObject, dataContractResolver) 
{ 
    // ... 
} 

Как вы можете видеть, этот код создает new StreamingContext(StreamingContextStates.All).
Просто для ясности, подобный код NetDataContractSerializer использует контекст, который приходит из прошедшего экземпляра сериализатора:

internal XmlObjectSerializerContext(NetDataContractSerializer serializer) 
    : this(serializer, serializer.MaxItemsInObjectGraph, serializer.Context, serializer.IgnoreExtensionDataObject) 
{ 
} 
+2

Источник ссылки [здесь] (http://referencesource.microsoft.com/#System.Runtime.Serialization/System/Runtime/Serialization/XmlObjectSerializerContext.cs,e795a6c172a1c403) и [здесь] (http://referencesource.microsoft.com/#System.Runtime.Serialization/System/Runtime/Serialization/DataContractSerializer.cs,5b4be2ac4b9d82e8.references), я считаю. – dbc