2010-06-02 21 views
5

我有一個這樣的對象,如何在XML序列化程序中停止並清空標記?

public class UserObj 
{ 
    public string First {get; set;} 
    public string Last {get; set;} 
    public addr Address {get; set;} 

} 

public class addr 
{ 
    public street {get; set;} 
    public town {get; set;} 
} 

現在,當我使用的XmlSerializer它,街道和鎮是空的我在XML輸出得到這個,

<Address /> 

有沒有一種方法輸出這個空標籤?

感謝

+2

爲什麼你需要避免空標籤?他們是有效的XML,不是嗎? – 2010-06-02 13:33:52

回答

3

您可以實現一個ShouldSerializeAddress方法來決定地址財產是否應該被序列化:

public bool ShouldSerializeAddress() 
{ 
    return Address != null 
     && !String.IsNullOrEmpty(Address.street) 
     && !String.IsNullOrEmpty(Address.town); 
} 

如果該方法與此簽名存在,序列化器將調用它在序列化屬性之前。

或者,你可以實現一個AddressSpecified屬性具有相同的作用:

public bool AddressSpecified 
{ 
    get 
    { 
     return Address != null 
      && !String.IsNullOrEmpty(Address.street) 
      && !String.IsNullOrEmpty(Address.town); 
    } 
} 
0

可以消除通過添加一個默認值屬性,該屬性的空值。當屬性的值匹配默認值時,它不會被序列化。您將默認值設置爲空,以消除序列化。這裏有一個例子:


using System.ComponentModel; 
public class UserObj 
{ 
    public string First {get; set;} 
    public string Last {get; set;} 

    [DefaultValue(null)] 
    public addr Address {get; set;} 

} 
0

我認爲賦予空值到地址字段應該工作。