BinaryFormatter.Deserialize HeaderHandler捕获返回值

时间:2012-03-28 11:40:59

标签: c# binaryformatter binary-deserialization

我使用BinaryFormatter.Deserialize(Stream, HeaderHandler).我可能错过了一些显而易见的事情,但我无法在网上找到任何示例,所以我希望有人可以解释一下。我已经传入了我的委托HeaderHandler,它返回了对象,但我不知道如何获取它返回的对象?

2 个答案:

答案 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();
                         });