【问题标题】:Extracting inner data from xml [closed]从xml中提取内部数据[关闭]
【发布时间】:2017-11-07 16:10:02
【问题描述】:

我有以下格式的 xml 数据:

<coll>
    <item>
        <key>description</key>
        <value>one</value>
    </item>
    <item>
        <key>name</key>
        <value>John</value>
    </item>
    <item>
        <key>lastName</key>
        <value>Peter</value>
    </item>
    <item>
        <key>institutionCode</key>
        <value>cliente_test</value>
    </item>
</coll>

我正在使用以下代码将其转换为 json:

XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);
string jsonText = JsonConvert.SerializeXmlNode(doc);

这给了我 json 值:

{
  "coll": {
    "item": [
      {
        "key": "description",
        "value": "one"
      },
      {
        "key": "name",
        "value": "John"
      },
      {
        "key": "lastName",
        "value": "Peter"
      },
      {
        "key": "institutionCode",
        "value": "cliente_test"
      }
    ]
  }
}

有没有办法从上面的xml中获取以下格式的json:

{
    "description" : "one",
    "name" : "John",
    "lastName" : "Peter",
    "institutionCode" : "cliente_test"
}

或进入以下 c# 对象:

public class Data
{
    [JsonProperty("description")]
    public string Description { get; set; }

    [JsonProperty("institutionCode")]
    public string InstitutionCode { get; set; }

    [JsonProperty("lastName")]
    public string LastName { get; set; }

    [JsonProperty("name")]
    public string Name { get; set; }
}

感谢任何形式的帮助。

【问题讨论】:

  • 答案是:是的,有办法。请告诉我们您已经尝试过什么以及您的特殊问题在哪里。
  • 要求我们推荐或查找书籍、工具、软件库、教程或其他场外资源的问题对于 Stack Overflow 来说是无关紧要的,因为它们往往会吸引固执己见的答案和垃圾邮件。相反,请描述问题以及迄今为止为解决该问题所做的工作。
  • “有没有办法获得以下格式的 json”。是的,当然有,但它需要您编写一些代码来将其转换为您的自定义格式。也许有一些地图工具可以提供帮助,也许——你做过任何研究吗?到目前为止,你做了什么来尝试实现你的目标? TBH 我很惊讶有人以你的代表分数提出这么糟糕的问题......

标签: c# json xml serialization


【解决方案1】:
var xDoc = XDocument.Load(filename);
var dict = xDoc.Descendants("item").ToDictionary(x => (string)x.Element("key"), 
                                                 x => (string)x.Element("value"));

var json = JsonConvert.SerializeObject(dict);

var data = JObject.FromObject(dict).ToObject<Data>();    

【讨论】:

    【解决方案2】:

    您在 XML 中拥有的是项目值的集合。这就是为什么它被转换为 json 中的列表的原因。除了自己实现之外别无他法,但这并不是一项艰巨的任务。您可以将数据读入字典,然后将其转换为 json。 做这样的事情

    xmldoc.Load(xmlfile);
    xmlnode = xmldoc.GetElementsByTagName("item");
    
    dynamic node= new ExpandoObject();
    var dictionary = (IDictionary<string, object>)node;
        for (int i = 0; i < xmlnode.Count; i++)
        {
    dictionary.Add(xmlnode[i].ChildNodes.Item(0).InnerText, xmlnode[i].ChildNodes.Item(1).InnerText)
    
    }
    
    var json = JsonConvert.SerializeObject(dictionary);
    

    【讨论】:

      猜你喜欢
      • 2013-07-08
      • 1970-01-01
      • 1970-01-01
      • 2017-11-08
      • 1970-01-01
      • 1970-01-01
      • 2012-12-04
      • 2012-03-04
      • 1970-01-01
      相关资源
      最近更新 更多