将 XML 响应转换为 Json 时出错

Posted

技术标签:

【中文标题】将 XML 响应转换为 Json 时出错【英文标题】:Error while converting XML response to Json 【发布时间】:2020-10-22 20:14:53 【问题描述】:

目标是将 XML 响应转换为 JSON。我正在访问一个返回 XML 数据的 API 端点。我收到数据,将其转换为 json 字符串,但是当我尝试反序列化 json 字符串时,它会抛出异常

阅读完 JSON 内容后遇到的附加文本::.路径'',第 1 行,位置 6

public string GetSaveData(string url)
    
        try
        
            using (WebClient client = new WebClient())
            
                var response = client.DownloadString(url);
                XmlDocument doc = new XmlDocument();
                doc.LoadXml(response);
                var json = JsonConvert.SerializeXmlNode(doc, Newtonsoft.Json.Formatting.None, true);
                var transactObject1 = JsonConvert.DeserializeObject(json); **//Exception is thrown at this line**
            
        
        catch (Exception ex)
        
            throw ex;
        

        return "success";
                  

transactObject1 抛出异常。

【问题讨论】:

那么您是否能够使用仅加载本地 XML 文件的控制台应用程序在本地重现此内容,以便向我们展示 XML 文件以及 SerializeXmlNode 返回的 JSON?基本上,请提供minimal reproducible example。 嗨——你能告诉我们你的jsonvar json = JsonConvert.SerializeXmlNode...之后的样子吗 我已经用少量硬编码的 xml 数据对其进行了测试。它没有抛出异常。但是当我使用从 API 返回的数据时,它会抛出异常。 数据很大,这里不能粘贴 “数据很大,无法粘贴到这里” - 所以将其缩减为确实显示问题的少量硬编码 XML 数据。拿你的海量数据,看看“只是前半部分”是否说明了问题。如果是这样,请摆脱下半场。如果没有,请查看“仅后半部分”是否显示问题。如果是这样,请摆脱前半部分。 (如果没有,事情当然会变得更棘手。)重复,直到你有一个演示问题的小例子。 【参考方案1】:

所以我通过删除声明导致 json 字符串格式错误的 XML 文档的起始标记找到了解决方案。

 public string GetSaveData(string url)
    
        try
        
            using (WebClient client = new WebClient())
            
                var response = client.DownloadString(url);
                XmlDocument doc = new XmlDocument();
                doc.LoadXml(response);
                foreach (XmlNode node in doc)
                
                    if (node.NodeType == XmlNodeType.XmlDeclaration)
                    
                        doc.RemoveChild(node);
                    
                
                var json = JsonConvert.SerializeXmlNode(doc, Newtonsoft.Json.Formatting.None, true);
                var transactObject1 = JsonConvert.DeserializeObject(json);
            
        
        catch (Exception ex)
        
            throw ex;
        

        return "success";
    

【讨论】:

以上是关于将 XML 响应转换为 Json 时出错的主要内容,如果未能解决你的问题,请参考以下文章

Azure APIM:将 JSON 响应转换为自定义 XML 格式

WSO2 Enterprise Integrator 6.6.0 使用 XSLT 将 XML 响应转换为 Json

将 JSON 转换为 Dictionary Swift 时出错

挂钩 OData 的 $metadata 响应并将其从 XML 转换为 JSON

XML PList 到 JSON 转换器并在客户端处理 JSON 响应 [关闭]

当 XML SOAP 响应中存在单个元素时,JSON 对象而不是数组