【问题标题】:Class serialization in XMLXML 中的类序列化
【发布时间】:2013-05-15 10:10:01
【问题描述】:
[XmlRoot("Class1")]
class Class1
{
[(XmlElement("Product")]
public string Product{get;set;}
[(XmlElement("Price")]
public string Price{get;set;}
}

这是我的课。在此价格中包含“£”符号。将其序列化为 XML 后,我得到“?”而不是“£”。

我需要做什么才能获得 XML 中的“£”?或者如何将价格数据作为 CDATA 传递?

【问题讨论】:

  • 向我们展示序列化代码。
  • 其实我有一个其他团队开发的库。我们只使用那个库,我们得到序列化的 XML。除了那个“£”标志,我一切都很好。
  • 听起来像是与编码有关 - 输出是用 UTF8 编写的吗?
  • 是的,输出是用 UTF8 编码编写的
  • XmlSerializerNamespaces Xsn = new XmlSerializerNamespaces(); Xsn.Add("", ""); XmlSerializer 提交 = 新 XmlSerializer(typeof(T)); StringWriter StringWriter = new StringWriter(); XmlWriter 作家 = XmlWriter.Create(StringWriter); Submit.Serialize(Writer, obj, Xsn); StringWriter.ToString(); // 你的 xml 这是序列化代码。在这个 Obj 中是要序列化的对象

标签: c# xml c#-4.0 xml-parsing xml-serialization


【解决方案1】:

您的问题一定与 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;
        }
    }

}

【讨论】:

  • 我相信您的回复是正确的。虽然 XML 可能被序列化为 UTF-8,但保存的文件是否编码为 UTF-8?此外,如果没有 BOM,Windows 会尝试“猜测”编码,有时它会出错。在 Windows 认为是 ANSI 或 CP-1252 的文件中使用 UTF-8 字符时,这一点非常明显——无效字符显示为 ?,因为没有相应的字符。只是一些想法可以帮助大家。
猜你喜欢
  • 1970-01-01
  • 2014-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多