Visual Studio: генерация кода при проблемах с xsd с целыми числами - PullRequest
2 голосов
/ 03 ноября 2011

Может кто-нибудь сказать мне, почему целочисленные элементы в xsd конвертируются в строковые поля?

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

в

[System.Xml.Serialization.XmlElementAttribute(DataType = "integer")]
public string OwnerID
{
    get
    {
        return this.ownerIDField;
    }
    set
    {
        this.ownerIDField = value;
    }
}

мое первое предположение о том, что все поля являются строками, связанными с реальным типом данных, было неверным - даты интерпретируются как даты, а bools - как bools - что не так с целым числом?

Заранее спасибо!

Ответы [ 2 ]

4 голосов
/ 03 ноября 2011

Вам нужно что-то вроде этого:

<xs:element name="OwnerID" >
    <xs:simpleType>
        <xs:restriction base="xs:int" />
    </xs:simpleType>
</xs:element>
2 голосов
/ 03 ноября 2011

sq33G ответ правильный, но я хочу добавить, что причина, по которой ваш оригинальный XSD-элемент

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

преобразуется в строку, заключается в том, что для W3C числовых типов данных , xs: intergerпредставляет любое целочисленное значение.Поскольку он не ограничен 32- или 64-разрядным числом и в C # нет числового типа данных, который может обрабатывать неограниченное целое число, десериализатор выбирает тип строки, поскольку это единственный тип, который может безопасно обрабатывать это значение.

...