将 XML 字符串 API 响应转换为键值对象 C#
Posted
技术标签:
【中文标题】将 XML 字符串 API 响应转换为键值对象 C#【英文标题】:Convert XML String API response to a key-value Object C# 【发布时间】:2020-12-25 12:08:34 【问题描述】:我从 API 接收 XML 字符串,并希望将这些转换为 C# 对象键值以处理这些值,同时应用一些断言。
消息的格式为字符串格式:
<?xml version="1.0" encoding="UTF-8"?>
<ReportData>
<ProjectName>Test Data</ProjectName>
<Unit>Unit 1</Unit>
<ReportLabel.Cost>394</ReportLabel.Cost>
</ReportData>
在我得到字符串 API 响应后,我试图像这样反序列化 XMl,其中 responseAPI 是上面的 xml:
XmlDocument doc = new XmlDocument();
using (var reader = JsonReaderWriterFactory.CreateJsonReader(Encoding.UTF8.GetBytes(responseAPI), XmlDictionaryReaderQuotas.Max))
XElement xml = XElement.Load(reader);
doc.LoadXml(xml.ToString());
此时我有 xml 但我无法获取键值对象。
我在努力
var jsonText = JsonConvert.SerializeXmlNode(doc);
或
serializer = new XmlSerializer(typeof(Object));
using (TextReader reader = new StringReader(responseAPI))
var result = (Object)serializer.Deserialize(reader);
或
var response = JsonConvert.DeserializeObject<Dictionary<string, object>>(responseAPI);
我不熟悉这种 XML 响应,但不确定执行此操作的方法。不像 JSON 格式那么简单。
【问题讨论】:
它是一个不能使用 JsonConvert 的 XML ***.com/questions/10518372/… 这能回答你的问题吗? How to convert an xml string to a dictionary? 【参考方案1】:您可以使用System.Xml.Linq
执行此任务。
这是从 XML 创建字典的一种方法:
static void Main(string[] args)
// or use other overload of the Load() method if the XML is not comes from a file stream, uri etc...
var xmldoc = System.Xml.Linq.XDocument.Load("YOUR FILE PATH");
Dictionary<string, string> XMLKeyval = new Dictionary<string, string>();
foreach (var name in xmldoc.Descendants("ReportData").Elements()
.Select(x => new Name = x.Name, Value = x.Value ).Distinct())
XMLKeyval.Add(name.Name.LocalName, name.Value);
// Output
foreach (KeyValuePair<string, string> itm in XMLKeyval)
Console.WriteLine(itm.Key + ": " + itm.Value);
Console.ReadLine();
【讨论】:
【参考方案2】:你不能直接将xml转换为键值对的dict,而是需要遍历xml中的每个节点,并将其作为键值对添加到dict对象中。
请参考Converting an XML-document to a dictionary
【讨论】:
我觉得链接的答案回答了这个问题,请将其标记为重复。以上是关于将 XML 字符串 API 响应转换为键值对象 C#的主要内容,如果未能解决你的问题,请参考以下文章