[英]Nullable value with xsd.exe generated class
我一直在使用xsd.exe生成一個用於反序列化XML的類。 我在源xsd中有十進制值,不需要:
<xs:attribute name="Balance" type="xs:decimal" use="optional" />
xsd生成的類生成以下代碼:
private decimal balanceField;
[System.Xml.Serialization.XmlAttributeAttribute()]
public decimal Balance {
get {
return this.balanceField;
}
set {
this.balanceField = value;
}
}
我注意到它不是可空的。
我如何將字段生成為可為空的字段,如下所示:
private decimal? balanceField;
[System.Xml.Serialization.XmlAttributeAttribute()]
public decimal? Balance {
get {
return this.balanceField;
}
set {
this.balanceField = value;
}
}
目前它的工作原理應該如此。 我正在使用xsd v2.0.50727.42並且:
<xs:element name="Port" type="xs:int" nillable="true" />
生成你正在尋找的東西(沒有冗余...Specified
字段和屬性):
private System.Nullable<int> portField;
[System.Xml.Serialization.XmlElementAttribute(IsNullable = true)]
public System.Nullable<int> Port {
get {
return this.portField;
}
set {
this.portField = value;
}
}
我相信如果在XML模式定義中添加nillable =“true” ,XSD將為該元素創建一個可為空的類型。 無論如何,這可能是一個好主意,因為你暗示這個值確實是可以為零的,這將使你的模式定義在這方面更加明確。
不幸的是,在這種情況下它仍然包含相應的“指定”字段。 如果希望序列化程序直接服從可空值,則需要從生成的代碼中手動刪除“xxSpecified”列。
我剛剛注意到它實際上包含了以下代碼:
private bool balanceFieldSpecified;
[System.Xml.Serialization.XmlIgnoreAttribute()]
public bool BalanceSpecified {
get {
return this.balanceFieldSpecified;
}
set {
this.balanceFieldSpecified = value;
}
}
這提供了我需要的功能。
如果有一種優雅的方式可以使用可空的話,我會暫時擱置這個問題嗎? 鍵入而不是。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.