2012-07-24 98 views
2

使用XmlSerializer類反序列化xml流時遇到問題。XML中缺少標記可阻止XmlSerializer創建屬性

我有一個對象那樣:

public class Test 
{ 
    [XmlElement("data")] 
    public AnotherObject Data 
    { 
    get; set; 
    } 

    // other properties 
} 

它會正常工作時,我會嘗試反序列化:

<Test> 
    <data>...</data> 
    <something else... /> 
</Test> 

但是,如果XML是這樣的:

<Test> 
    <something else... /> 
</Test> 

當我嘗試讀取新創建的對象的Data屬性時,代碼將引發異常。如果我嘗試觀察對象,調試器會打印一個「無法評估異常」。

即使XML中沒有相應的標記,我也希望該屬性存在。

有沒有可能這樣做?

謝謝!

+0

你只是指'.Data'是一個'null'引用? – 2012-07-24 15:36:08

回答

3

XML反序列化在設置屬性之前使用調用默認構造函數。您可以將data屬性設置爲默認值,如果從反序列化中加載該屬性,則該屬性將被覆蓋。

+0

這很簡單。謝謝。 – 2012-07-24 16:23:47

1

看看這有助於:

public class Test 
{ 
    [XmlElement("data")] 
    public System.Nullable<AnotherObject> Data 
    { 
    get; set; 
    } 

    // other properties 
} 

,將允許空值,爲AnotherObject被接受,基本上允許數據爲空。

注意:這非常依賴於您的模式。如果你的模式阻止了空值,這是行不通的。欲瞭解更多信息,請參閱:http://msdn.microsoft.com/en-us/library/1t3y8s4s.aspx