为什么ISerializationSurrogate.SetObject返回一个对象以及一个对象填充?

Rob*_*vey 6 c# serialization runtime

我最近在看运行时序列化并遇到了ISerializationSurrogate界面.SetObject然而,我对它的方法感到困惑.

签名是:

object SetObjectData(object obj, System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context, System.Runtime.Serialization.ISurrogateSelector selector)

和帮助信息是:

摘要:

使用System.Runtime.Serialization.SerializationInfo中的信息填充对象.

参数:

obj:要填充的对象.

info:填充对象的信息.

context:反序列化对象的源.

selector:代理选择器,其中搜索兼容的代理开始.

返回:

填充的反序列化对象.

如果obj是要填充的对象,为什么会返回The populated deserialized object?在MSDN的一个例子中,他们填充objreturn null.

Kai*_*fei 6

查看此.NET专栏文章:http://msdn.microsoft.com/en-us/magazine/cc188950.aspx

它说:

请注意,SetObjectData方法的返回类型为Object.这会让您认为SetObjectData实际上可以返回对完全不同类型的对象的引用.但是,Microsoft SoapFormatter和BinaryFormatter类型完全忽略此返回值,这就是我在前一个示例中返回null的原因.显然,这里有一个错误; 返回值应允许SetObjectData返回不同的对象.

Microsoft已安排此错误进行修复.如果返回值为null,则格式化程序将使用它传递给SetObjectData的对象.如果SetObjectData返回对象引用,则格式化程序将使用返回的对象.不幸的是,在修复此错误之前,您无法反序列化值类型.