如何将StreamingContext传递给DataContractSerializer?

MTR*_*MTR 3 c# serialization datacontractserializer

我正在尝试将一些数据传递给DataContractSerializer的StreamingContext,但我无法弄清楚如何.以下是我的代码的一小部分示例:

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);
Run Code Online (Sandbox Code Playgroud)

Den*_*nis 6

你不能.

使用时DataContractSerializer,StreamingContext传递给序列化/反序列化回调的实例来自内部XmlObjectSerializerContext.

这是初始化代码:

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

如您所见,此代码创建new StreamingContext(StreamingContextStates.All).
为了清楚起见,NetDataContractSerializer使用上下文的类似代码来自传递的序列化程序实例:

internal XmlObjectSerializerContext(NetDataContractSerializer serializer) 
    : this(serializer, serializer.MaxItemsInObjectGraph, serializer.Context, serializer.IgnoreExtensionDataObject)
{
}
Run Code Online (Sandbox Code Playgroud)

  • 参考源[这里](http://referencesource.microsoft.com/#System.Runtime.Serialization/System/Runtime/Serialization/XmlObjectSerializerContext.cs,e795a6c172a1c403,references)和[here](http://referencesource.microsoft. com /#System.Runtime.Serialization/System/Runtime/Serialization/DataContractSerializer.cs,5b4be2ac4b9d82e8,引用),我相信. (2认同)