c# – 从较旧版本的对象反序列化较新版本的对象

前端之家收集整理的这篇文章主要介绍了c# – 从较旧版本的对象反序列化较新版本的对象前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
假设我有这个课程:
  1. [Serializable]
  2. public class SomeClass
  3. {
  4. public SomeClass() {//init}
  5. public string SomeString {get;set;}
  6. }

该类在应用程序关闭获取Serialized,并在下次运行时进行反序列化.

然后,我构建它并发布了应用程序,现在该类已更改:

  1. [Serializable]
  2. public class SomeClass
  3. {
  4. public SomeClass() {//init}
  5. public string SomeString {get;set;}
  6. public int SomeInt {get;set;}
  7. }

有没有办法在反序列化时将属性设置为默认值,以防在旧的序列化对象中找不到它?

我想到的一种方法是保留类的旧版本,然后检查序列化的版本然后循环旧对象的属性并在新对象中设置它们,但这对我来说是没有意义的,任何其他有意义的解决方案?

解决方法

您可以使用属性标记字段
  1. [OptionalField()]

Version Tolerant Serialization所述

这个类看起来像这样:

  1. [Serializable()]
  2. public class SomeClass
  3. {
  4. public SomeClass() {//init}
  5. public string SomeString { get; set; }
  6.  
  7. [OptionalField(VersionAdded = 2)]
  8. public int SomeInt { get; set; }
  9.  
  10.  
  11. [OnDeserialized()]
  12. private void SetValuesOnDeserialized(StreamingContext context)
  13. {
  14. this.SomeInt = 10;
  15. }
  16. }

猜你在找的C#相关文章