2013-04-25 56 views
0

我有正在序列化的對象,並且想要添加「版本」屬性。.Net反序列化XML,確定元素是否存在

我想是:

了在代碼中創建
  1. 的新對象應給予「最新」版本(定義某處)
  2. 對象反序列化,即在它們的xml中有版本屬性,應該標記爲「版本1」。

  3. 對象反序列化,即在它們的xml中有版本屬性,應該使用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"; 

回答

0

地址:

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

您覺得這應該得到(由XmlSerializer的本身),當它有一個值設置爲true。但請注意:在序列化期間,還需要報告爲真,否則不包括該值。


也許一個更簡單的方法:

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

然後檢查該字段爲空。

+0

這個問題是當有人創建一個實例時,他們需要設置版本。我希望在構造函數中將版本設置爲最新版本。 – Dave 2013-04-25 17:37:54

+0

構造函數很棘手,因爲'XmlSerializer'總是運行那個... – 2013-04-25 21:24:16