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

时间:2012-03-08 10:20:13

标签: c# .net xsd xsd.exe

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

我的元素:

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

生成为:

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

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

1 个答案:

答案 0 :(得分:58)

此行为为by design

  

xs:integer类型被指定为没有大写或小写的数字   受其大小限制。出于这个原因,既没有XML序列化也没有   验证将其映射到 System.Int32 类型。相反,XML序列化   将xs:integer映射到字符串,同时验证将其映射到   十进制类型比任何整数类型都要大得多   .NET Framework

使用xs:int(带符号的32位整数)将Xsd.exe映射到System.Int32

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

这是XML Schema Definition标准中定义的detailed list数据类型。