繁体   English   中英

如何判断 class 是否可以序列化?

[英]How do I tell if a class can be serialized?

我正在遍历 Session 键并将条目及其值添加到哈希表中,然后我将对其进行序列化。 我遇到的问题是 Session 上有一个 object 是不可序列化的,无论如何也不应该序列化。 我环顾四周,很多内置类型都没有实现 ISerializable 属性,因此对此进行测试不起作用:

if (val is ISerializable)
{
    ...
}

那么,我该如何测试呢? 这有意义吗?

只有一种保证方法可以确定 object 是否可序列化。 序列化它,看看操作是否成功。

我知道这似乎有点矫枉过正,但是可以破坏序列化的方式有很多。 您可以检查元数据中的两项,以查看一个类型是否声明可序列化(ISerializable 和 [Serializable]),但这只是一个声明。 它可以并且以许多不同的方式被破坏。

问题在于,在.Net 世界中,声明能够被序列化和实际序列化的行为是两个独立的不同行为。 完全有可能(并且合法)做一个但不能做另一个。 以此为例

[Serializable]
public class Foo {
  public Object Field1;
}

这个 class 声称是可序列化的并且很可能是可序列化的。 这完全取决于实际存储在 Field1 中的值。 再多的对类型的元数据检查都不会告诉你它是否真的可以被序列化。 你所能做的就是尝试看看它是否成功。

您可以使用 class 类型的 IsSerializable 属性。

if(val.GetType().IsSerializable)

检查 CRL 将使用的相同内容: [Serializable]属性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM