我正在使用BinaryFormatter.Deserialize(Stream, HeaderHandler).,我可能在这里错过了一些显而易见的东西,但是我无法在网上找到任何示例,因此我希望有人可以有所作为。我已经传递了返回对象的委托(delegate)HeaderHandler,但是我不知道如何掌握返回的对象?

最佳答案

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

但是,所有这些都是实现细节!在大多数理智的方案中,答案是:不使用它。

实际上, header 处理发生在主要反序列化之后,这会谨慎地使用 header 处理程序在上下文对象上设置一些值,然后由您处理。

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

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。

关于c# - BinaryFormatter.Deserialize HeaderHandler捕获返回值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9906750/

10-08 22:05