0

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

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

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

4

5 回答 5

2

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

如果你真的需要序列化一个不是的类Serializable,你可以手动完成:

  1. 找出一些方法来将您的问题类转换为替代表示和从替代表示转换。
  2. 使用该其他类进行序列化,根据需要来回转换。

如果做不到这一点,你应该看看除了序列化之外的其他保存状态的方法。

于 2010-11-23T14:40:55.673 回答
0

您不能在运行时修改属性。仅在源中。

于 2010-11-23T14:28:58.227 回答
0

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

于 2010-11-23T14:31:11.020 回答
0

.NET 框架本身通常在所有有意义的类和结构中提供序列化支持,因此框架本身的类很可能适用于您的克隆。但是,如果您使用任何 3rd-party 库,您可能会遇到麻烦,不幸的是,这些库通常没有适当的序列化支持。

于 2010-11-23T14:39:27.933 回答
0

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

于 2010-11-23T14:52:46.650 回答