缺失元素和無效元素之間存在差異。
甲缺少的元素,<a><b>2</b></a>
。如果沒有明確的默認這裏C將帶您指定的任何默認值,使用默認值屬性,或者爲null。
空元件<a><b>2</b><c xs:Nil='true'/></a>
。在這裏你會得到空。
當你做<a><b>2</b><c></c><a/>
XML序列化器將嘗試解析的String.Empty作爲一個整數的將正確失敗。
由於您的提供商產生無效的XML,你需要做到這一點,如果使用XmlSerializer:
[XmlRoot(ElementName = "a")]
public class A
{
[XmlElement(ElementName = "b")]
public int? B { get; set; }
[XmlElement(ElementName = "c")]
public string _c { get; set; }
public int? C
{
get
{
int retval;
return !string.IsNullOrWhiteSpace(_c) && int.TryParse(_c, out retval) ? (int?) retval : null;
}
}
}
或略好使用的DataContractSerializer
[DataContract(Name="a")]
public class A1
{
[DataMember(Name = "b")]
public int? B { get; set; }
[DataMember(Name = "c")]
private string _c { get; set; }
public int? C
{
get
{
int retval;
return !string.IsNullOrWhiteSpace(_c) && int.TryParse(_c, out retval) ? (int?)retval : null;
}
}
}
雖然DataContractSerializer的不支持屬性如果這是一個問題。
請不要在「C#」前加前綴。這就是標籤的用途。 – 2012-03-12 20:33:53