2013-05-15 2 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? Кроме того, если нет спецификации, Windows пытается «угадать» кодировку, и иногда она ошибочна. Это очень очевидно при использовании символов UTF-8 в файле, который Windows считает ANSI или CP-1252 - недопустимые символы отображаются как '?', Потому что не существует соответствующего символа. Просто некоторые мысли, чтобы помочь всем. – fourpastmidnight

Смежные вопросы