修改共享方法会改变引用它们的类吗?

时间:2011-06-04 10:18:53

标签: .net vb.net serialization

我想知道什么会改变一个类,因为这个类的序列化对象将不再被识别。

如果该类具有引用另一个类的共享方法。更改此类共享方法是否也会更改引用它们的类?

如果将扩展方法更改为自定义类,那么这会影响类“签名”,如果这是一个合适的术语吗?

3 个答案:

答案 0 :(得分:1)

数据 更改时,序列化对象会更改。对方法的引用从未被序列化;它们是代码的一部分而不是数据。

答案 1 :(得分:1)

如果您正在进行二进制序列化,则更改被序列化的类的私有属性和公共属性将“破坏接口”。如果您正在使用XML或JSON,更改公共属性将改变其序列化的方式。方法不会被序列化,因此您可以更改它们并且它仍然可以工作(只要您不更改签名)。

答案 2 :(得分:1)

对此的一个很好的参考是MSDN上的Version Tolerant Serialization。简而言之,对共享(C#中的静态)方法的更改不会影响对象的反序列化:

  
      
  • 永远不要删除序列化字段。

  •   
  • 如果该属性未应用于先前版本的字段,请勿将NonSerializedAttribute属性应用于字段。

  •   
  • 切勿更改序列化字段的名称或类型。

  •   
  • 添加新的序列化字段时,请应用OptionalFieldAttribute属性。

  •   
  • 从字段中删除NonSerializedAttribute属性(在以前的版本中不可序列化)时,应用OptionalFieldAttribute属性。

  •   
  • 对于所有可选字段,请使用序列化回调设置有意义的默认值,除非可以接受0或nullas默认值。

  •   

作为未成年人:对与序列化相关的某些特殊方法的更改可能会影响反序列化。但是你会有意识地决定改变它们。