我使用XmlSerializer,並具有以下特性的一類XML序列化 - 渲染空元素
public string Data { get; set; }
,我需要輸出酷似所以
<Data />
我怎麼會去實現這個?
我使用XmlSerializer,並具有以下特性的一類XML序列化 - 渲染空元素
public string Data { get; set; }
,我需要輸出酷似所以
<Data />
我怎麼會去實現這個?
解決方案是創建一個PropertyNameSpecified
屬性,序列化器用來確定是否序列化屬性。例如:
public string Data { get; set; }
[XmlIgnore]
public bool DataSpecified
{
get { return !String.IsNullOrEmpty(Data); }
set { return; } //The serializer requires a setter
}
您可以嘗試向該成員添加像[XmlElement(IsNullable=true)]
這樣的XMLElementAttribute。這將強制XML序列化程序添加元素,即使它爲空。
最近,我這樣做的,還存在另一種方式做到這一點,似乎有點簡單。您只需要將該屬性的值初始化爲空字符串,然後根據需要創建一個空標記;
Data = string.Empty;
對於字符串,這工作就像一個魅力!如果數據從未被賦值,它將以XML格式顯示爲'',並且沒有xsi:nil =「true」屬性。 – 2013-03-14 17:49:30
嘗試使用公共BOOL ShouldSerialize_PropertyName _(){}裏面設置的默認值。
public bool ShouldSerializeData()
{
Data = Data ?? "";
return true;
}
工作原因說明可在MSDN找到。
我站好了。添加了相關文檔的鏈接,以便其他人不會犯同樣的錯誤。 – BradleyDotNET 2014-12-03 18:35:26
你可以嘗試添加XMLElementAttribute像[的XmlElement(ISNULLABLE = TRUE)該成員,並設置在get/set屬性是這樣的:
[XmlElement(IsNullable = true)]
public string Data
{
get { return string.IsNullOrEmpty(this.data) ? string.Empty : this.data; }
set
{
if (this.data != value)
{
this.data = value;
}
}
}
private string data;
所以你不會有:
<Data xsi:nil="true" />
我們將看到這樣的渲染:
<Data />
但不會此呈現<數據XSI:無= 「真」/> – 2010-02-24 22:23:44