我正在处理我必须提出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);
我怎样才能做到这一点?
答案 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
这将是结果:
答案 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);