2010-02-24 88 views

回答

6

解決方案是創建一個PropertyNameSpecified屬性,序列化器用來確定是否序列化屬性。例如:

public string Data { get; set; } 

[XmlIgnore] 
public bool DataSpecified 
{ 
    get { return !String.IsNullOrEmpty(Data); } 
    set { return; } //The serializer requires a setter 
} 
0

您可以嘗試向該成員添加像[XmlElement(IsNullable=true)]這樣的XMLElementAttribute。這將強制XML序列化程序添加元素,即使它爲空。

+9

但不會此呈現<數據XSI:無= 「真」/> – 2010-02-24 22:23:44

12

最近,我這樣做的,還存在另一種方式做到這一點,似乎有點簡單。您只需要將該屬性的值初始化爲空字符串,然後根據需要創建一個空標記;

Data = string.Empty; 
+0

對於字符串,這工作就像一個魅力!如果數據從未被賦值,它將以XML格式顯示爲'',並且沒有xsi:nil =「true」屬性。 – 2013-03-14 17:49:30

1

嘗試使用公共BOOL ShouldSerialize_PropertyName _(){}裏面設置的默認值。

public bool ShouldSerializeData() 
{ 
    Data = Data ?? ""; 
    return true; 
} 

工作原因說明可在MSDN找到。

+1

我站好了。添加了相關文檔的鏈接,以便其他人不會犯同樣的錯誤。 – BradleyDotNET 2014-12-03 18:35:26

0

你可以嘗試添加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 />