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