2012-03-08 9 views
27

जब मैं xsd.exe के साथ xsd स्कीमा से सी # कक्षा उत्पन्न करता हूं, तो मुझे यह बीहाइवर थोड़ा विचित्र लगता है।xsd.exe xs के लिए स्ट्रिंग प्रॉपर्टी क्यों उत्पन्न करता है: पूर्णांक?

मेरे तत्व:

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

को उत्पन्न होता है:

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

क्यों कि संपत्ति एक पूर्णांक के बजायस्ट्रिंग के रूप में उत्पन्न नहीं कर रहा है?

उत्तर

54

यह व्यवहार by design है:

xs:integer प्रकार कोई ऊपरी या निचली इसके आकार पर बाध्य के साथ एक संख्या के रूप में निर्दिष्ट किया जाता है। इस कारण से, न तो एक्सएमएल सीरियलाइजेशन और न ही सत्यापन इसे सिस्टम.इन्ट 32 प्रकार पर मैप करें। इसके बजाय, एक्सएमएल क्रमबद्धता जबकि सत्यापन दशमलव प्रकार .नेट फ्रेमवर्क

उपयोग xs:int है, जो एक है में पूर्णांक प्रकारों में से किसी से भी ज्यादा बड़ा है कि करने के लिए यह नक्शे एक स्ट्रिंग के लिए xs:integer नक्शे 32-बिट पूर्णांक पर हस्ताक्षर किए, एक System.Int32 को Xsd.exe नक्शा पास करने के लिए:

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

यहाँ XML परिभाषा मानक में परिभाषित डेटा प्रकार के एक detailed list है।

+1

स्पॉट ऑन। मैं xs: int और xs: integer के बीच के अंतर के बारे में नहीं जानता था। मैंने सोचा कि यह सी # में int और Int32 की तरह था। – Glenn

+0

टीआईबीसीओ सेवाओं को वैध डेटा भेजने की कोशिश करते समय अब ​​हमारे पास समस्या है। बेशक टीआईबीसीओ बदलने वाला नहीं है इसलिए हमारे पास अद्भुत है। –

+0

वे निश्चित रूप से उस के लिए System.Numerics.BigInteger का उपयोग करना चाहिए! – dimaaan