XML响应转JSON解析报错:Unexpected character异常处理求助
解决XML转义字符串转JSON的解析错误问题
嘿,我来帮你搞定这个问题!你遇到的Unexpected character encountered while parsing value: <错误原因很明确:你收到的响应是经过HTML实体转义的XML字符串,不是JSON,直接用JSON解析器处理当然会失败——JSON解析器预期开头是{或[,但你的字符串开头是<(也就是转义后的<)。
下面是分两步的解决方案:
步骤1:解码HTML实体,还原原始XML
首先需要把字符串里的<、>这些HTML实体转成对应的XML符号(<、>)。在.NET环境下,你可以用内置的WebUtility.HtmlDecode方法来完成:
// 你收到的转义后XML字符串 string escapedXml = "<response> \r\n <data> \r\n <status no=\"0\" substatus=\"0\"> Connection succeeded </status>\r\n </data> \r\n </response>"; // 解码得到原始XML string rawXml = System.Net.WebUtility.HtmlDecode(escapedXml);
解码后你会得到正常的XML内容:
<response> <data> <status no="0" substatus="0"> Connection succeeded </status> </data> </response>
步骤2:将XML转换为JSON
接下来可以用Json.NET(Newtonsoft.Json)工具把XML转换成JSON,这是.NET里处理这类转换最方便的库之一。如果还没安装,可以通过NuGet安装Newtonsoft.Json包。
示例代码:
using Newtonsoft.Json; using System.Xml; // 加载XML到XmlDocument XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(rawXml); // 序列化为JSON(带缩进格式,方便阅读) string jsonResult = JsonConvert.SerializeXmlNode(xmlDoc, Formatting.Indented);
执行后你会得到这样的JSON结果:
{ "response": { "data": { "status": { "@no": "0", "@substatus": "0", "#text": " Connection succeeded " } } } }
可选:调整JSON输出格式
如果你不想在JSON里保留XML属性的@前缀,或者文本节点的#text键,可以通过XmlNodeConverter的配置来调整:
using Newtonsoft.Json.Converters; var converter = new XmlNodeConverter { OmitRootObject = false, WriteArrayAttributes = false, // 去掉属性的@前缀 AttributePrefix = "" }; string jsonResult = JsonConvert.SerializeObject(xmlDoc, Formatting.Indented, converter);
这样输出的JSON会更简洁:
{ "response": { "data": { "status": { "no": "0", "substatus": "0", "#text": " Connection succeeded " } } } }
内容的提问来源于stack exchange,提问作者Akbar Badhusha
相关产品推荐
相关产品推荐

