web-dev-qa-db-ja.com

xsd.exeがxs:integerの文字列プロパティを生成するのはなぜですか?

Xsd.exeを使用してxsdスキーマからc#クラスを生成すると、この動作が少し奇妙になります。

私の要素:

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

生成先:

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

そのプロパティがstringではなくintとして生成されないのはなぜですか?

32
Glenn

この動作は 設計による

xs:integerタイプは、サイズに上限または下限のない数値として指定されます。このため、XMLのシリアル化も検証もSystem.Int32型にマップしません。代わりに、XMLシリアル化はxs:integerを文字列にマップし、検証はそれをどの整数型よりもはるかに大きいDecimal型にマップします.NETFrameworkで

符号付き32ビット整数であるxs:intを使用して、 Xsd.exeSystem.Int32 にマップします。

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

これは、XMLスキーマ定義標準で定義されているデータ型の 詳細リスト です。

64