我正在使用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/