2009-11-15 7 views
8

किसी अन्य प्रश्न का उत्तर देने का प्रयास करते समय, मैं एक सी # ऑब्जेक्ट को एक्सएमएल स्ट्रिंग में क्रमबद्ध कर रहा था। यह आश्चर्यजनक रूप से कठिन था;एक्स # टेक्स्ट के रूप में सी # कक्षा को क्रमबद्ध करने का आसान तरीका

var yourList = new List<int>() { 1, 2, 3 }; 
var ms = new MemoryStream(); 
var xtw = new XmlTextWriter(ms, Encoding.UTF8); 
var xs = new XmlSerializer(yourList.GetType()); 
xs.Serialize(xtw, yourList); 
var encoding = new UTF8Encoding(); 
string xmlEncodedList = encoding.GetString(ms.GetBuffer()); 

परिणाम ठीक है: यह कम से कम कोड स्निपेट मैं के साथ आ सकता था

<?xml version="1.0" encoding="utf-8"?> 
<ArrayOfInt 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <int>1</int> 
    <int>2</int> 
    <int>3</int> 
</ArrayOfInt> 

लेकिन टुकड़ा और अधिक जटिल की तुलना में मुझे लगता है कि यह होना चाहिए है। मुझे विश्वास नहीं है कि आपको इस सरल कार्य के लिए एन्कोडिंग और मेमोरीस्ट्रीम के बारे में जानना है।

क्या किसी ऑब्जेक्ट को XML स्ट्रिंग में क्रमबद्ध करने का कोई छोटा तरीका है?

उत्तर

19

एक छोटी सी छोटी :-)

var yourList = new List<int>() { 1, 2, 3 }; 
using (var writer = new StringWriter()) 
{ 
    new XmlSerializer(yourList.GetType()).Serialize(writer, yourList); 
    var xmlEncodedList = writer.GetStringBuilder().ToString(); 
} 

वहाँ यह पिछले दृष्टिकोण है कि उनका कहना है लायक है के साथ एक दोष है हालांकि। यह utf-16 शीर्षलेख उत्पन्न करेगा क्योंकि हम StringWriter का उपयोग करते हैं, इसलिए यह आपके कोड के बराबर नहीं है। प्राप्त करने के लिए utf-8 हैडर हम का उपयोग करना चाहिए एक MemoryStream और एक XmlWriter जो कोड की एक अतिरिक्त पंक्ति है:

var yourList = new List<int>() { 1, 2, 3 }; 
using (var stream = new MemoryStream()) 
{ 
    using (var writer = XmlWriter.Create(stream)) 
    { 
     new XmlSerializer(yourList.GetType()).Serialize(writer, yourList); 
     var xmlEncodedList = Encoding.UTF8.GetString(stream.ToArray()); 
    } 
} 
+1

यदि आप 'GetStringBuilder() ' –

+1

नहीं करते हैं तो भी छोटा, धन्यवाद, SQL सर्वर ने केवल यूटीएफ -8 संस्करण स्वीकार किया। मुझे लगता है कि यह सी # में आता है जितना आसान है ... – Andomar

+2

@Andomar: मैंने पहले यह प्रश्न नहीं देखा था ... आप मेरे Utf8StringWriter कक्षा का उपयोग करके इस कोड में से कुछ से बच सकते हैं। Http://stackoverflow.com/questions/3862063 –

0

स्निपेट को समाहित करने के लिए एक एक्सटेंशन विधि या रैपर वर्ग/फ़ंक्शन लिखें।

+4

विशेष रूप से इसे आसान बनाएं - केवल जटिलता को स्थानांतरित करता है (हालांकि यह पुन: उपयोग का स्तर दर्शाता है)। – Murph

0

आप MemoryStream की जरूरत नहीं है, बस एक StringWriter का उपयोग: यह नहीं है

var yourList = new List<int>() { 1, 2, 3 }; 
using (StringWriter sw = new StringWriter()) 
{ 
    var xs = new XmlSerializer(yourList.GetType()); 
    xs.Serialize(sw, yourList); 
    string xmlEncodedList = sw.ToString(); 
} 
+3

देखें यह यूटीएफ -16 होगा, यूटीएफ -8 नहीं –

संबंधित मुद्दे

 संबंधित मुद्दे