2012-03-08 14 views
27

xsd.exe ile bir xsd şemadan bir C# sınıfı oluşturduğumda bu davranışı biraz garip buluyorum.Neden xsd.exe xs için string özelliği oluşturur: integer?

Benim eleman:

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

için oluşturulur:

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

Neden özelliği bir int yerine dize olarak oluşturulan değil midir?

cevap

54

Bu davranış by design olup:

xs:integer tipi boyutuna bağlı herhangi bir üst veya daha düşük bir sayı olarak belirlenir. Bu nedenle, ne XML serileştirme ne de doğrulama, onu System.Int32 türüne eşler. doğrulama bir olduğunu .NET Framework

Kullanım xs:int, içinde tamsayı türlerinden herhangi çok daha büyüktür Ondalık türüne gönderilir eşler ise yerine XML seri bir dizeye xs:integer eşler bir System.Int32 için Xsd.exe harita ona sahip olmak, 32 bit tamsayı imzalanmış:

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

İşte XML şema tanımı standardında tanımlanan veri türlerinin bir detailed list bu.

+1

Spot on. Xs: int ve xs: integer arasındaki farkın farkında değildim. Int ve Int32'de c gibi olduğunu düşündüm. – Glenn

+0

TIBCO hizmetlerine geçerli veri göndermeye çalışırken sorunu şimdi biliyoruz. Tabii ki TIBCO değişmeyecek, bu yüzden harika. –

+0

Kesinlikle bunun için System.Numerics.BigInteger kullanmalısınız! – dimaaan

İlgili konular