【问题标题】:Reading UTF-16 encoded XML file with XmlSerializer使用 XmlSerializer 读取 UTF-16 编码的 XML 文件
【发布时间】:2010-11-23 08:10:36
【问题描述】:

我正在调用 WebService 并获取从 WebMethod 返回的字符串。该字符串是一个序列化为 XML 的对象,应该使用 System.Xml.XmlSerializer 进行反序列化。

我的问题是第一行表明文档是UTF-16编码的:

<?xml version="1.0" encoding="utf-16"?>

所以在反序列化时,我得到了错误:

There is an error in XML document (0, 0).

string.Replace("utf-16", "utf-8") 确实行得通,但是必须有一个干净的方法让XmlSerializer知道?

【问题讨论】:

  • 如前所述(见答案),这不会导致问题;你能展示更多围绕这个的代码吗?理想情况下是一个完全可重现的例子?

标签: .net xml xmlserializer


【解决方案1】:

这不应该影响任何事情 - 以下工作正常:

using System;
using System.IO;
using System.Xml.Serialization;

[XmlRoot("someType")]
public class Test {
    [XmlAttribute("hello")]
    public string Value { get; set; }
}
static class Program {   
    static void Main()     {
        string xml = @"<?xml version=""1.0"" encoding=""utf-16""?>
<someType hello=""world""/>";
        var ser = new XmlSerializer(typeof(Test));
        Test obj;
        using (var reader = new StringReader(xml)) {
            obj = (Test)ser.Deserialize(reader);
        }
        Console.WriteLine(obj.Value);
    }

}

【讨论】:

  • 你是对的,使用 StringReader 就可以了。我的问题是我绕道而行,将字符串转换为 Byte[],将其包装在一个用 XmlTextReader 包装的 MemoryStream 中 - 这显然要好得多,谢谢。
猜你喜欢
  • 2016-08-14
  • 2021-03-09
  • 1970-01-01
  • 2021-07-01
  • 2019-02-02
  • 2012-06-12
  • 2014-09-07
  • 1970-01-01
  • 2013-04-28
相关资源
最近更新 更多