4

我正在使用BinaryFormatter.Deserialize(Stream, HeaderHandler).我可能在这里遗漏了一些明显的东西,但我在网上找不到任何例子,所以我希望有人能有所启发。我已经传入了返回对象的委托 HeaderHandler,但我不知道如何获取它返回的对象?

4

2 回答 2

3

ķ; 通过反射器跟踪。常规实现使用此值的唯一时间是,当通过远程处理处理某些数据时,如果从返回的值HeaderHandler是 a MarshalByRefObject,在这种情况下,将获得一个身份并用于链接回。具体来说,System.Runtime.Remoting.Messaging.MethodCall构造函数。

但所有这些都是一个实现细节!在大多数理智的情况下,答案是:它没有被使用。

实际上,标头处理发生主要反序列化之后,这排除了使用标头处理程序在上下文对象上设置一些值,然后您进行处理。

但是,您的标头处理程序仍然可以更新局部变量:

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 。

于 2012-03-28T12:13:42.660 回答
0

据我所知, BinaryFormatter 对返回的对象没有任何作用。

var deserializedObject = (TypeOfDeserializedObject)
                         BinaryFormatter.Deserialize(stream, headers => 
                         { 
                             //do stuff with your headers here
                             foreach (var header in headers)
                             {

                             }
                             return new object();
                         });
于 2012-03-28T12:02:53.050 回答