0

我有正在序列化的对象并想要添加“版本”属性。

我想要的是:

  1. 在代码中创建的新对象应该被赋予“最新”版本(在某处定义)
  2. 反序列化的对象,在其 xml 中没有版本属性,应标记为“版本 1”。

  3. 反序列化的对象,在其 xml中确实具有 version 属性,应使用 xml 中的任何版本。

示例(伪代码):

const string LatestVersion = "2";
class Foo {
   public String version {get; set; }
}

var foo = new Foo();
foo.version == "2"
serialize(foo) ->  "<foo><version>2</version></foo>";

foo = deserialize("<foo></foo>")
foo.version == "1";

foo = deserialize("<foo><version>2</version>");
foo.version == "2";

foo = deserialize("<foo><version>3</version>");
foo.version == "3";
4

1 回答 1

0

添加:

[XmlIgnore]
public bool versionSpecified {get;set;}

当它有一个值时,您应该会发现它被设置为 true(由 XmlSerializer 本身)。但请注意:它还需要在序列化期间报告true,否则不包括该值。


也许更简单的方法:

private string _version;
public string version {
    get { return _version ?? "1"; } // the default value
    set { _version = value; }
}

然后检查该字段是否为空。

于 2013-04-25T17:20:20.563 回答