我在 .NET 中使用二进制序列化来克隆对象。我必须用属性标记我自己的任何类<Serializable()>
,以便序列化程序处理该类。然而,由于这是一个将用于任何对象的函数,我想知道:
即使没有用<Serializable()>
属性标记,是否可以让序列化程序序列化对象?如果没有,有没有办法将属性“自动应用”到任何类?
编辑。我主要担心的是我需要能够克隆 .NET Framework 中已经存在的 POCO 对象。所有这些都已经可以序列化了吗?
我在 .NET 中使用二进制序列化来克隆对象。我必须用属性标记我自己的任何类<Serializable()>
,以便序列化程序处理该类。然而,由于这是一个将用于任何对象的函数,我想知道:
即使没有用<Serializable()>
属性标记,是否可以让序列化程序序列化对象?如果没有,有没有办法将属性“自动应用”到任何类?
编辑。我主要担心的是我需要能够克隆 .NET Framework 中已经存在的 POCO 对象。所有这些都已经可以序列化了吗?
如果不知道一个类是如何实现的,序列化它是不安全的,这样做可能会导致对象被巧妙地破坏。这就是为什么类设计者必须有意添加Serializable
属性,让运行时知道这是一个安全操作。自动将该属性添加到任何类可能是一个坏主意。
如果你真的需要序列化一个不是的类Serializable
,你可以手动完成:
如果做不到这一点,你应该看看除了序列化之外的其他保存状态的方法。
您不能在运行时修改属性。仅在源中。
您可以使用反射来迭代任何类/实例的属性。但是您必须制作一个自定义序列化程序。
.NET 框架本身通常在所有有意义的类和结构中提供序列化支持,因此框架本身的类很可能适用于您的克隆。但是,如果您使用任何 3rd-party 库,您可能会遇到麻烦,不幸的是,这些库通常没有适当的序列化支持。
考虑使用 typeof(yourType).IsSerializable...