Xsd.exeを使用してxsdスキーマからc#クラスを生成すると、この動作が少し奇妙になります。
私の要素:
<xs:element name="InvoiceNo" type="xs:integer"/>
生成先:
[System.Xml.Serialization.XmlElementAttribute(DataType="integer", Order=5)]
public string InvoiceNo
{
...
}
そのプロパティがstringではなくintとして生成されないのはなぜですか?
この動作は 設計による :
xs:integer
タイプは、サイズに上限または下限のない数値として指定されます。このため、XMLのシリアル化も検証もSystem.Int32型にマップしません。代わりに、XMLシリアル化はxs:integer
を文字列にマップし、検証はそれをどの整数型よりもはるかに大きいDecimal型にマップします.NETFrameworkで
符号付き32ビット整数であるxs:int
を使用して、 Xsd.exe を System.Int32 にマップします。
<xs:element name="InvoiceNo" type="xs:int" />
これは、XMLスキーマ定義標準で定義されているデータ型の 詳細リスト です。