我使用BinaryFormatter.Deserialize(Stream, HeaderHandler).
我可能错过了一些显而易见的事情,但我无法在网上找到任何示例,所以我希望有人可以解释一下。我已经传入了我的委托HeaderHandler,它返回了对象,但我不知道如何获取它返回的对象?
答案 0 :(得分:3)
k;通过反射器跟踪。常规实现使用此值的唯一时间是,当通过远程处理处理某些数据时,如果从HeaderHandler
返回的值是MarshalByRefObject
,则在这种情况下获取标识并用于链接。具体来说,是System.Runtime.Remoting.Messaging.MethodCall
构造函数。
但所有这些都是一个实现细节!在大多数理智的场景中,答案是:它没有被使用。
实际上,标头处理在主反序列化之后发生了,它强烈地使用header-handler在上下文对象上设置一些值,然后处理这些值。
但是,您的标头处理程序仍然可以更新局部变量:
string someValue = null;
object obj = serializer.Deserialize(source, headers => {
// check the headers and assign someValue based on
// what you find there; for brevity, make it up!
someValue = "something from the headers";
return null;
});
Console.WriteLine(someValue);
喜欢完整的词汇封闭。
但就个人而言,我的结论是:这不是这样做的方法。我只需传输一个DTO,其中完全您要发送的数据。
答案 1 :(得分:0)
据我所知,BinaryFormatter对返回的对象没有任何作用。
var deserializedObject = (TypeOfDeserializedObject)
BinaryFormatter.Deserialize(stream, headers =>
{
//do stuff with your headers here
foreach (var header in headers)
{
}
return new object();
});