2012-03-08 9 views
27

Quando genero una classe C# da uno schema xsd con xsd.exe, trovo questo comportamento un po 'strano.Perché xsd.exe genera proprietà stringa per xs: intero?

mio elemento:

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

viene generato per:

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

Perché che la proprietà non è generato come int invece di stringa?

risposta

54

Questo comportamento è by design:

Il tipo xs:integer è specificato come un numero senza superiore o inferiore vincolato dalla sua dimensione. Per questo motivo, né la serializzazione XML né la convalida si associano al tipo System.Int32. Invece, la serializzazione XML mappa il xs:integer in una stringa, mentre convalida le mappe al decimale tipo che è molto più grande di qualsiasi dei tipi interi nel .NET Framework

Usa xs:int, che è un segno a 32 bit integer, per avere Xsd.exe mappa ad un System.Int32:

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

Ecco un detailed list dei tipi di dati definiti nella definizione standard XML Schema.

+1

Spot on. Non ero a conoscenza della differenza tra xs: int e xs: intero. Ho pensato che fosse come int e Int32 in C#. – Glenn

+0

Abbiamo il problema ora quando proviamo a inviare dati validi ai servizi TIBCO. Ovviamente TIBCO non cambierà quindi abbiamo, meraviglioso. –

+0

Definitivamente dovrebbero usare System.Numerics.BigInteger per quello! – dimaaan