2012-04-10 15 views
10

जब एक धारा DataContractSerializer में लिखने में एन्कोडिंग यूनिकोड -16 से अलग उपयोग करता है। अगर मैं इसे यूनिकोड -16 लिखने/पढ़ने के लिए मजबूर कर सकता हूं तो मैं इसे एसक्यूएल सीई के binary कॉलम में संग्रहीत कर सकता हूं और SELECT CONVERT(nchar(1000), columnName) के साथ इसे पढ़ सकता हूं। लेकिन जिस तरह से, मैं प्रोग्रामिक रूप से छोड़कर इसे पढ़ नहीं सकता।DataContractSerializer टेक्स्ट एन्कोडिंग को कैसे बदलें?

क्या मैं System.Runtime.Serialization.DataContractSerializer द्वारा उपयोग किए गए एन्कोडिंग को बदल सकता हूं?

+0

इस लिंक से आपको मदद कर सकता है: http://sedodream.com/CategoryView,category,DataContractSerializer.aspx – Rajesh

उत्तर

10

डेटाकंट्रैक्टसेरियलाइज़र WriteObject विधि में ओवरलोड हैं जो Stream या XmlWriter (और XmlDictionaryWriter) पर लिखते हैं। Stream अधिभार यूटीएफ -8 में डिफ़ॉल्ट होगा, इसलिए आपको किसी अन्य का उपयोग करने की आवश्यकता होगी। एक एक्सएमएल राइटर इंस्टेंस का उपयोग करना जो यूटीएफ -16 में एक्सएमएल लिखता है, जो आपको चाहिए, ताकि आप जो भी कर सकते हैं, वह कर सकते हैं, या आप XmlDictionaryWriter.CreateTextWriter द्वारा लौटाए गए लेखक का उपयोग कर सकते हैं जिसके लिए आप पैरामीटर के रूप में Encoding.Unicode पास करते हैं।

public class StackOverflow_10089682 
{ 
    [DataContract(Name = "Person", Namespace = "http://my.namespace")] 
    public class Person 
    { 
     [DataMember] 
     public string Name { get; set; } 
     [DataMember] 
     public int Age { get; set; } 
    } 
    public static void Test() 
    { 
     MemoryStream ms = new MemoryStream(); 
     XmlDictionaryWriter writer = XmlDictionaryWriter.CreateTextWriter(ms, Encoding.Unicode); 
     DataContractSerializer dcs = new DataContractSerializer(typeof(Person)); 
     Person instance = new Person { Name = "John Doe", Age = 33 }; 
     dcs.WriteObject(writer, instance); 
     writer.Flush(); // Don't forget to Flush the writer here 
     Console.WriteLine("Decoding using UTF-16: {0}", Encoding.Unicode.GetString(ms.ToArray())); 
    } 
} 
+0

अनजान वस्तुओं - अच्छा नहीं। – Phil

+0

निश्चित रूप से, इसे साफ करने की आवश्यकता है। लेकिन मैं इस सवाल पर ध्यान केंद्रित करने के लिए जितना संभव हो सके कोड को लिखना चाहता हूं (लिखने के लिए एक अलग एन्कोडिंग का उपयोग कैसे करें) जबकि अभी भी पर्याप्त है कि इसे स्वयं चलाया जा सकता है। – carlosfigueira

+0

यह एक्सएमएल घोषणा नहीं लिखता है। यदि आप इसे चाहते हैं, तो इस जवाब में XmlTextWriter का उपयोग करें: http://stackoverflow.com/a/10089892/2279059 –

4

आप XmlWriterSettings उपयोग करने की कोशिश की है? जैसे

var s = new DataContractSerializer (typeof(Thing)); 

using(var wr = XmlTextWriter.Create(
    @"test.xml", new XmlWriterSettings{Encoding=Encoding.UTF32})) 
{ 
    s.WriteObject(wr, new Thing{Foo="bar"}); 
} 

public class Thing 
{ 
    public string Foo { get; set; } 
} 

कुछ एन्कोडिंग की आवश्यकता का उल्लेख करें।

+0

DataContractSerializer एक XmlTextWriter नहीं लिखेगा। यह संकलित करता है, लेकिन कुछ भी लिखा नहीं है। –

+1

यह मेरे लिए ठीक काम करता है। Encoding.Unicode साथ LINQPad में त्वरित परीक्षण देता है बार Phil

+0

केवल 'test.xml' नहीं, बल्कि आप जानते हैं कि एक पूर्ण पथ की आपूर्ति करने का प्रयास करें आउटपुट समाप्त हो रहा है। – Phil

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