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

发布于 2024-10-03 18:06:23 字数 387 浏览 5 评论 0原文

我正在调用 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 知道吗?

I am calling a WebService and get a string returned from a WebMethod. The string is an object serialized as XML that should be deserialized using the System.Xml.XmlSerializer.

My problem is that the first line indicates that the document is UTF-16 encoded:

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

So when deserializing, i get the error:

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

It does work to do string.Replace("utf-16", "utf-8"), but there must be a clean method to let the XmlSerializer know?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

2024-10-10 18:06:23

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

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

}

That shouldn't affect anything - the following works fine:

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

}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文