簡體   English   中英

使用xsd.exe生成的類可以為Nulllable值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM