如何解决将XML字符串API响应转换为键值对象C#
我正在从和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格式那么简单。
解决方法
您可以使用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();
}
,
您不能直接将xml转换为键值对的dict,相反,我们需要遍历xml中的每个节点并将其作为键值对添加到dict对象。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。