नहीं, आप StringWriter
मध्यवर्ती से छुटकारा पाने के लिए उपयोग कर सकते हैं MemoryStream
। हालांकि, एक्सएमएल में मजबूर करने के लिए आप एक उपयोग करने की आवश्यकता StringWriter
है जो ओवरराइड करता है Encoding
संपत्ति:
public class Utf8StringWriter : StringWriter
{
public override Encoding Encoding => Encoding.UTF8;
}
या यदि आप अभी तक C # 6 का उपयोग नहीं कर रहे हैं:
public class Utf8StringWriter : StringWriter
{
public override Encoding Encoding { get { return Encoding.UTF8; } }
}
फिर:
var serializer = new XmlSerializer(typeof(SomeSerializableObject));
string utf8;
using (StringWriter writer = new Utf8StringWriter())
{
serializer.Serialize(writer, entry);
utf8 = writer.ToString();
}
स्पष्ट रूप से आप Utf8StringWriter
एक अधिक सामान्य वर्ग में प्रवेश कर सकते हैं जो इसके निर्माता में किसी भी एन्कोडिंग को स्वीकार करता है - लेकिन मेरे अनुभव में UTF-8 अब तक सबसे अधिक आवश्यक "कस्टम" एन्कोडिंग है StringWriter
:)
अब जैसा कि जॉन हैना कहते हैं, यह अभी भी आंतरिक रूप से UTF-16 होगा, लेकिन संभवत: आप इसे किसी बिंदु पर किसी अन्य चीज़ में पास करने जा रहे हैं, इसे बाइनरी डेटा में परिवर्तित करने के लिए ... उस बिंदु पर आप उपरोक्त स्ट्रिंग का उपयोग कर सकते हैं, इसे UTF-8 बाइट में परिवर्तित करें, और सब कुछ ठीक हो जाएगा - क्योंकि XML घोषणा "एन्कोफ -8" को एन्कोडिंग के रूप में निर्दिष्ट करेगी।
संपादित करें: इस काम को दिखाने के लिए एक छोटा लेकिन पूर्ण उदाहरण:
using System;
using System.Text;
using System.IO;
using System.Xml.Serialization;
public class Test
{
public int X { get; set; }
static void Main()
{
Test t = new Test();
var serializer = new XmlSerializer(typeof(Test));
string utf8;
using (StringWriter writer = new Utf8StringWriter())
{
serializer.Serialize(writer, t);
utf8 = writer.ToString();
}
Console.WriteLine(utf8);
}
public class Utf8StringWriter : StringWriter
{
public override Encoding Encoding => Encoding.UTF8;
}
}
परिणाम:
<?xml version="1.0" encoding="utf-8"?>
<Test xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<X>0</X>
</Test>
"Utf-8" की घोषित एन्कोडिंग पर ध्यान दें जो हम चाहते थे, मुझे विश्वास है।