微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将XML字符串API响应转换为键值对象C#

如何解决将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对象。

请参阅Converting an XML-document to a dictionary

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?