2012-03-08 64 views
27

當我使用xsd.exe從xsd模式生成c#類時,我發現這個行爲有點奇怪。爲什麼xsd.exe爲xs:integer生成字符串屬性?

我的元素:

<xs:element name="InvoiceNo" type="xs:integer"/> 

產生於:

[System.Xml.Serialization.XmlElementAttribute(DataType="integer", Order=5)] 
public string InvoiceNo 
{ 
    ... 
} 

這是爲什麼財產不作爲INT,而不是產生的?

回答

54

此行爲是by design

xs:integer的類型被指定爲與沒有結合在其大小上或下 一個數字。因此,XML序列化或 驗證都不會將其映射到System.Int32類型。相反,XML序列化 的xs:integer映射到一個字符串,同時驗證其映射到 十進制類型,它是在 .NET框架

使用xs:int,這是一個比任何整數類型的要大得多簽署的32位整數,有Xsd.exe映射到一個System.Int32

<xs:element name="InvoiceNo" type="xs:int" /> 

下面是在XML Schema定義標準中定義的數據類型的detailed list

+1

現貨。我沒有意識到xs:int和xs:integer之間的區別。我認爲這是像int和Int32在C#中。 – Glenn 2012-03-08 10:47:25

+0

嘗試向TIBCO服務發送有效數據時,我們現在遇到了問題。當然,TIBCO不會改變,所以我們有,很棒。 – 2014-02-26 14:36:09

+0

他們definetly應該使用System.Numerics.BigInteger! – dimaaan 2017-02-10 14:48:44