Почему xsd.exe генерирует строковое свойство для xs: integer? - PullRequest
32 голосов
/ 08 марта 2012

Когда я генерирую класс ac # из схемы xsd с помощью xsd.exe, я нахожу это поведение немного странным.

Мой элемент:

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

создается для:

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

Почему это свойство не генерируется как int вместо string ?

1 Ответ

61 голосов
/ 08 марта 2012

Это поведение по проекту :

Тип 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.

...