当前位置: 首页 > news >正文

C#反序列化XML时提示XML 文档(1, 1)中有错误

最近在反序列化一个XML时,遇到了如下报错:

XML 文档(1, 1)中有错误。

内部异常

XmlException: 根级别上的数据无效。 第 1 行,位置 1。

看描述应该是XML格式的问题,我把XML复制到新建的控制台程序,反序列化又是可以的。代码如下:

 1  internal class Program2  {3      static void Main(string[] args)4      {5          var xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Response>\r\n  <Status>200</Status>\r\n  <Message>成功</Message>\r\n</Response>";6 7          XmlSerializer xmlSerializer = new XmlSerializer(typeof(Response));8          using (StringReader sr = new StringReader(xml))9          {
10              Response response = (Response)xmlSerializer.Deserialize(sr);
11          }          
13      }
14  }
15 
16  public class Response
17  {
18      public int Status { get; set; }
19 
20      public string Message { get; set; }
21  }

在Stackoverflow上找到一个解决方案,这里分享一下

原因如下:

Each Unicode character in a string is defined by a Unicode scalar value, also called a Unicode code point or the ordinal (numeric) value of the Unicode character. Each code point is encoded using UTF-16 encoding, and the numeric value of each element of the encoding is represented by a Char object.

大意来讲,就是XML里指定的是utf-8编码,.NET内部使用了utf-16编码。

1 <?xml version="1.0" encoding="utf-8"?>

解决方法如下:

使用Utf-8编码获取字节数组,再通过调用Deserialize的重载,将字节数组转换成流传进去。

1 XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
2 
3 var buffer = Encoding.UTF8.GetBytes(xml);
4 using (MemoryStream ms = new MemoryStream(buffer))
5 {
6     return (T)xmlSerializer.Deserialize(ms);
7 }

参考资料:

https://stackoverflow.com/questions/310669/why-does-c-sharp-xmldocument-loadxmlstring-fail-when-an-xml-header-is-included

http://www.lryc.cn/news/494159.html

相关文章:

  • C# 中的接口:定义行为契约与实现多态性
  • Redis的基础知识·
  • qt QProxyStyle详解
  • AWS CLI 操作指南
  • 海盗王用golang重写的AccountServer功能
  • 如何保证spring boot应用程序的安全性?
  • 力扣 岛屿数量-200
  • 极狐GitLab 17.6 正式发布几十项与 DevSecOps 相关的功能【三】
  • 十二、正则表达式、元字符、替换修饰符、手势和对话框插件、字符串截取
  • 【信息系统项目管理师】第3章:信息系统治理 考点梳理
  • 实现对图片或者视频增加隐藏水印和提取水印
  • uniapp配置全局消息提醒
  • 卸载snap docker一直卡住:Save data of snap “docker“ in automatic snapshot set #3
  • python学习——字典元素的访问和遍历
  • 数据结构基础之《(9)—归并排序》
  • 【深度学习】各种卷积—卷积、反卷积、空洞卷积、可分离卷积、分组卷积
  • 远程视频验证如何改变商业安全
  • 电脑启动需要经历哪些过程?
  • 纯Go语言开发人脸检测、瞳孔/眼睛定位与面部特征检测插件-助力GoFly快速开发框架
  • postman使用正则表达式提取数据实战篇!
  • ipmitool使用详解(三)-解决各种dell、hp服务器无法ipmitool连接问题
  • AWS EC2设置用户名密码登录
  • BurpSuite安装教程(详细!!附带下载链接)
  • MIPS寄存器文件设计实验
  • uniapp使用扩展组件uni-data-select出现的问题汇总
  • 反向代理模块开发
  • 海康面阵、线阵、读码器及3D相机接线说明
  • AI与ArcGIS Pro的地理空间分析和可视化
  • 详解HTML5语言
  • docker compose一键启动ES集群和kibana