使用XmlSerializer读取UTF-16编码的XML文件

4
我将调用一个 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知道?


正如所注明的那样(请参见答案),这不应该造成问题;你能展示更多包围它的代码吗?最好是一个完全可重现的例子。 - Marc Gravell
1个回答

5

那不应该影响任何事情 - 下面的内容可以正常工作:

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);
    }

}

1
你说得对,使用StringReader完全没问题。我的问题在于我走了一条弯路,将字符串转换为Byte[],将其包装在MemoryStream中,再用XmlTextReader包装 - 这显然更好,谢谢。 - Anders Jakobsen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接