为什么 ISerializationSurrogate.SetObject 返回一个对象并获取一个对象来填充?

发布于 2024-12-09 02:36:51 字数 1203 浏览 0 评论 0原文

我最近在研究运行时序列化,并遇到了 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:要填充的对象。

信息:填充对象的信息。

上下文:反序列化对象的源。

选择器:代理选择器,从这里开始搜索兼容的代理。

退货:

填充的反序列化对象。

如果 obj 是要填充的对象,为什么它会返回填充的反序列化对象?在 MSDN 的一个示例中,它们填充obj返回 null

I was recently looking at Runtime Serialization and came across the ISerializationSurrogate interface. I am confused about it's SetObject method however.

The signature is:

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

and the help information is:

Summary:

Populates the object using the information in the System.Runtime.Serialization.SerializationInfo.

Parameters:

obj: The object to populate.

info: The information to populate the object.

context: The source from which the object is deserialized.

selector: The surrogate selector where the search for a compatible surrogate begins.

Returns:

The populated deserialized object.

If obj is the object to populate, why does it return The populated deserialized object? In one example from MSDN they populate obj and return null.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

双马尾 2024-12-16 02:36:51

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

它说:

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

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

Check this .NET column article: http://msdn.microsoft.com/en-us/magazine/cc188950.aspx

It says:

Notice that the SetObjectData method has a return type of Object. This would make you think that SetObjectData could actually return a reference to a completely different type of object. However, the Microsoft SoapFormatter and BinaryFormatter types ignore this return value completely, which is why I returned null in the previous example. Obviously, there is a bug here; the return value should allow SetObjectData to return a different object.

Microsoft has scheduled this bug for repair. If the return value is null, then the formatter will use the object that it passed to SetObjectData. If SetObjectData returns an object reference, then the formatter will use the object that's returned. Unfortunately, until this bug is fixed, you can't deserialize a value type.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文