.Net反序列化XML,确定元素是否不存在

时间:2013-04-25 16:38:13

标签: .net xml-serialization

我有序列化的对象,并希望添加“版本”属性。

我想要的是:

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

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

  4. 示例(伪代码):

    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";
    

1 个答案:

答案 0 :(得分: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; }
}

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