2013-05-15 95 views
0
[XmlRoot("Class1")] 
class Class1 
{ 
[(XmlElement("Product")] 
public string Product{get;set;} 
[(XmlElement("Price")] 
public string Price{get;set;} 
} 

這是我的課。在這個價格中包含'£'符號。序列化到XML後,我得到'?'而不是'£'。XML中的類序列化

我需要做什麼才能獲得XML中的'£'?或者我如何以CDATA的價格傳遞數據?

+0

向我們展示序列化代碼。 –

+0

其實我有一個由其他團隊開發的庫。我們只使用該庫,並獲取序列化的XML。除了'英鎊'符號,我得到的一切都很好。 – Bhushan

+0

聽起來像編碼的東西 - 輸出是用UTF8編寫的嗎? –

回答

0

您的問題必須是如何將XML寫入文件。

我已經編寫了一個程序,它使用了迄今爲止給我的信息,當我打印出XML字符串時,它是正確的。

我得出這樣的結論:錯誤發生在數據寫入XML文件或從XML文件讀回數據時。

using System; 
using System.Collections.Generic; 
using System.IO; 
using System.Xml; 
using System.Xml.Serialization; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main() 
     { 
      new Program().Run(); 
     } 

     void Run() 
     { 
      Class1 test = new Class1(); 
      test.Product = "Product"; 
      test.Price = "£100"; 

      Test(test); 
     } 

     void Test<T>(T obj) 
     { 
      XmlSerializerNamespaces Xsn = new XmlSerializerNamespaces(); 
      Xsn.Add("", ""); 
      XmlSerializer submit = new XmlSerializer(typeof(T)); 
      StringWriter stringWriter = new StringWriter(); 
      XmlWriter writer = XmlWriter.Create(stringWriter); 
      submit.Serialize(writer, obj, Xsn); 
      var xml = stringWriter.ToString(); // Your xml This is the serialization code. In this Obj is the object to serialize 

      Console.WriteLine(xml); // £ sign is fine in this output. 
     } 
    } 

    [XmlRoot("Class1")] 
    public class Class1 
    { 
     [XmlElement("Product")] 
     public string Product 
     { 
      get; 
      set; 
     } 

     [XmlElement("Price")] 
     public string Price 
     { 
      get; 
      set; 
     } 
    } 

} 
+0

我相信你的回答是正確的。雖然XML可能會被序列化爲UTF-8,但保存的文件是否編碼爲UTF-8?另外,如果沒有BOM,Windows會嘗試「猜測」編碼,有時會出錯。在Windows認爲是ANSI或CP-1252的文件中使用UTF-8字符時,這非常明顯 - 由於沒有相應的字符,無效字符顯示爲「?」。只是有些想法可以幫助每個人。 – fourpastmidnight