假设我有这个课程:
[Serializable] public class SomeClass { public SomeClass() {//init} public string SomeString {get;set;} }
该类在应用程序关闭时获取Serialized,并在下次运行时进行反序列化.
然后,我构建它并发布了应用程序,现在该类已更改:
[Serializable] public class SomeClass { public SomeClass() {//init} public string SomeString {get;set;} public int SomeInt {get;set;} }
有没有办法在反序列化时将属性设置为默认值,以防在旧的序列化对象中找不到它?
我想到的一种方法是保留类的旧版本,然后检查序列化的版本然后循环旧对象的属性并在新对象中设置它们,但这对我来说是没有意义的,任何其他有意义的解决方案?
解决方法
您可以使用属性标记字段
[OptionalField()]
如Version Tolerant Serialization所述
这个类看起来像这样:
[Serializable()] public class SomeClass { public SomeClass() {//init} public string SomeString { get; set; } [OptionalField(VersionAdded = 2)] public int SomeInt { get; set; } [OnDeserialized()] private void SetValuesOnDeserialized(StreamingContext context) { this.SomeInt = 10; } }