为什么xsd.exe为xs:integer生成字符串属性?

当我使用xsd.exe从xsd模式生成ac#类时,我觉得这个行为有点奇怪。

我的元素:

 

生成为:

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

为什么该属性不是作为int而不是字符串生成的?

此行为是设计使然 :

xs:integer类型指定为其大小没有上限或下限的数字。 因此,XML序列化和validation都不会将其映射到System.Int32类型。 相反,XML序列化将xs:integer映射到字符串,而validation将其映射到比.NET Framework中的任何整数类型大得多的Decimal类型

使用xs:int ,这是一个带符号的32位整数,让Xsd.exe将它映射到System.Int32 :

  

以下是XML Schema Definition标准中定义的数据类型的详细列表 。