2012-03-08 9 views
27

私はxsd.exeを使ってxsdスキーマからc#クラスを生成すると、私はこのbehaivorを少し見つけました。なぜxsd.exeはxs:integerの文字列プロパティを生成しますか?

マイ要素:

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

がに生成されます。

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

はなぜプロパティがint型代わりの文字列として生成されていないこと?

答えて

54

この現象は、by designである:

xs:integer型は、そのサイズに結合しない上部または下部 と数として指定されています。このため、XMLシリアル化も 検証も、System.Int32タイプにマップしません。検証がある .NET Frameworkの

使用xs:int、整数型のいずれかよりもはるかに大きい タイプにマップしながら、その代わりに、XMLシリアル化 は、文字列にxs:integerをマップ

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

はここでXMLスキーマ定義標準で定義されたデータ型のdetailed listです:System.Int32からXsd.exeマップそれを持って、32ビット整数を署名しました。

+1

スポットオン。私はxs:intとxs:integerの違いを認識していませんでした。私はintとint32のようなものだと思った。 – Glenn

+0

有効なデータをTIBCOサービスに送信しようとすると、問題が発生します。 TIBCOは変わっていないので、私たちは素晴らしいです。 –

+0

彼らは確かにそれのためにSystem.Numerics.BigIntegerを使うべきです! – dimaaan

関連する問題