将XML响应解析回JSON

时间:2018-04-24 10:29:13

标签: c# json xml

我正在处理我必须提出API请求的项目。当我向服务器发布JSON请求时,我得到以下XML作为响应:

"<response>
    \r\n  
    <data>
       \r\n   
        <status no=\"0\" substatus=\"0\">
           Connection succeeded
        </status>\r\n 
    </data>
        \r\n
</response>"

我需要将响应转换回JSON。但是当我试图解析它时,我得到一个错误说

  

&#39;解析值时遇到意外的字符:&lt;。路径&#39;&#39;,   第0行,第0位。&#39;

我使用NewtonSoftJSON进行转换。

这是我用来将XML字符串转换回JSON的代码:

var response = JsonConvert.DeserializeXmlNode(xmlResponse);

我怎样才能做到这一点?

3 个答案:

答案 0 :(得分:2)

没有从XML直接转换为JSON。您应该使用XML解析器来进行此响应。

解析XML(C#)

https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/linq/parsing-xml

我还建议阅读更多关于序列化的内容,因为这个问题实际上没有意义。

答案 1 :(得分:2)

我会对任何期望JSON作为输入并返回XML作为其响应的webapi感到高度困惑。但是,如果这正是您所关注的,那么您需要采用将XML响应序列化为XmlDocument或更新的XDocument / XNode的方法,然后将其中一个的实例序列化为JSON。

XmlDocument类型有一个Load方法,它使用XmlReader。 (它还提供LoadXml,但我想在这里显示几个选项。

XDocument类型有一个Parse方法,它使用带有XML的字符串。

根据您的示例输入,您可以使用两种方法:

var xml = @"<response>
    <data>
        <status no=""0"" substatus=""0"">
           Connection succeeded
        </status>
    </data>
</response>";

// xmldocument
var xmlReader = XmlReader.Create(new StringReader(xml));
var doc = new XmlDocument();
doc.Load(xmlReader);
var response = JsonConvert.SerializeXmlNode(doc);

response.Dump("XMLDoc to Json "); // LINQPad output

// or XDOcument

response = JsonConvert.SerializeXNode(XDocument.Parse(xml));

response.Dump("XDocument to Json");// LINQPad output

这将是结果:

enter image description here

答案 2 :(得分:1)

我已经弄明白了这个问题。 rene的回答有助于弄清楚如何从xml转换为json。但问题在于我的回答。我能够通过移除/&#34;来解决它。和响应中不需要的双引号。

 response = response.Replace("<response>\"", "<response>")
                 .Replace("\"<response>", "<response>")
                 .Replace("\\", "")
                 .Replace("rn", string.Empty);

var xmlReader = XmlReader.Create(new StringReader(response));
var doc = new XmlDocument();
doc.Load(xmlReader);

var jsonResponse = JsonConvert.SerializeXmlNode(doc);