我想知道什么会改变一个类,因为这个类的序列化对象将不再被识别。
如果该类具有引用另一个类的共享方法。更改此类共享方法是否也会更改引用它们的类?
如果将扩展方法更改为自定义类,那么这会影响类“签名”,如果这是一个合适的术语吗?
答案 0 :(得分:1)
数据 更改时,序列化对象会更改。对方法的引用从未被序列化;它们是代码的一部分而不是数据。
答案 1 :(得分:1)
如果您正在进行二进制序列化,则更改被序列化的类的私有属性和公共属性将“破坏接口”。如果您正在使用XML或JSON,更改公共属性将改变其序列化的方式。方法不会被序列化,因此您可以更改它们并且它仍然可以工作(只要您不更改签名)。
答案 2 :(得分:1)
对此的一个很好的参考是MSDN上的Version Tolerant Serialization。简而言之,对共享(C#中的静态)方法的更改不会影响对象的反序列化:
永远不要删除序列化字段。
如果该属性未应用于先前版本的字段,请勿将NonSerializedAttribute属性应用于字段。
切勿更改序列化字段的名称或类型。
添加新的序列化字段时,请应用OptionalFieldAttribute属性。
从字段中删除NonSerializedAttribute属性(在以前的版本中不可序列化)时,应用OptionalFieldAttribute属性。
对于所有可选字段,请使用序列化回调设置有意义的默认值,除非可以接受0或nullas默认值。
作为未成年人:对与序列化相关的某些特殊方法的更改可能会影响反序列化。但是你会有意识地决定改变它们。