2012-06-07 39 views
1

這應該是一個簡單的。XML序列化 - 爲什麼我不能更改編碼?

我將C#對象的列表序列化爲XML文檔。一切都進行得很順利但是我的XML文檔具有ASCII編碼(空格表示爲X0020例如)和客戶抱怨,所以我想編碼改爲UTF8像這樣:

private void SerializeToXML(List<ResponseData> finalXML) 
{ 
    XmlSerializer serializer = new XmlSerializer(typeof(List<ResponseData>)); 
    TextWriter textWriter = new StreamWriter(txtFileLocation.Text, Encoding.UTF8); 
    serializer.Serialize(textWriter, finalXML); 
    textWriter.Close(); 
} 

智能感知告訴我這應該工作...

Intellisense

...但是當我嘗試它在抱怨......

Error

我在做什麼錯?

感謝

+2

空間的代碼在ASCII和UTF-8相同的(就像在0-127範圍內的所有字符)......我在這裏沒有看到任何問題。我認爲代碼正在做它應該做的事情,並且你的客戶是錯誤的(是的,我知道,客戶永遠是對的......) –

+0

Ecoding.UTF8在默認情況下在TextWriter中使用。沒有必要通過ctor。 – Dennis

+0

這些值出現在哪裏?你可以給樣品XML嗎? – user845279

回答

4

沒有(字符串,編碼)方法的StreamWriter的構造函數簽名。

構造函數有一個(Stream,Encoding)簽名。

+0

啊,樹木和所有這些! Thankyou – JMK

+0

一雙新鮮的眼睛常常解決我的問題。不用謝:) –

1

這裏是工作就像一個魅力的一個片段:

using (Stream stream = File.Open(SerializeXmlFileName, FileMode.Create)) 
{ 
    using (TextWriter writer = new StreamWriter(stream, Encoding.UTF8)) 
    { 
     XmlSerializer xmlFormatter = new XmlSerializer(this.Member.GetType()); 
     xmlFormatter.Serialize(writer, this.Member); 
     writer.Close(); 
    } 

    stream.Close(); 
} 
相關問題