Serializable属性.NET

时间:2010-11-23 14:26:58

标签: .net serialization binary-serialization

我在.NET中使用二进制序列化来克隆对象。我必须使用<Serializable()>属性标记我自己的任何类,以便序列化程序处理该类。但是,由于这是一个将在任何对象上使用的函数,我想知道:

是否可以让序列化程序序列化对象,即使它没有标记<Serializable()>属性?如果没有,有没有办法将属性“自动应用”到任何类?

编辑。我主要担心的是我需要能够克隆.NET Framework中已存在的POCO对象。所有这些都已经可以序列化了吗?

5 个答案:

答案 0 :(得分:2)

在不知道如何实现类的情况下,序列化它是不安全的,这样做可能会导致细微破坏的对象。这就是为什么类设计者必须有意添加Serializable属性,让运行时知道这是一个安全的操作。自动将该属性添加到任何类可能是一个坏主意。

如果您确实需要序列化非Serializable的类,可以手动执行:

  1. 找出将问题类转换为替代表示的一些方法。
  2. 使用其他类进行序列化,根据需要来回转换。
  3. 如果不这样做,你应该看看除了序列化之外保留状态的其他方法。

答案 1 :(得分:0)

您无法在运行时修改属性。仅限于来源。

答案 2 :(得分:0)

您可以使用反射来迭代任何类/实例的属性。 但是你必须制作一个自定义序列化器。

答案 3 :(得分:0)

.NET框架本身通常在所有有意义的类和结构中提供序列化支持,因此框架本身的类很可能适用于您的克隆。但是,如果您使用任何第三方库,可能会遇到麻烦,遗憾的是,这些库通常没有正确的序列化支持。

答案 4 :(得分:0)

考虑使用typeof(yourType).IsSerializable ......