使用复杂的 XML 数据将 XML 转换为 JSON

Converting XML to JSON with complex XML data

我有一个 XML 这样的:

       <job>
           <properties>
              <name>jobid</name>
              <value>81963</value>
           </properties>
           <properties>
              <name>status</name>
              <value>complete</value>
           </properties>
           <properties>
              <name>date</name>
              <value>2018-07-30</value>
           </properties>
        </job>
        <job>
           <properties>
              <name>jobid</name>
              <value>81194</value>
           </properties>
           <properties>
              <name>status</name>
              <value>complete</value>
           </properties>
           <properties>
              <name>date</name>
              <value>2018-07-30</value>
           </properties>
        </job>

我需要做的是获取每个作业的所有属性。我很难遍历它的节点和子节点,但无法得到它的确切逻辑。我真正需要做的是将这些数据转换成类似的东西:

[{
  "jobid": "81963",
  "status": "complete",
  "date": "2018-07-30"
}, 
{
  "jobid": "81194",
  "status": "complete",
  "date": "2018-07-30"
}]

我已经试过了:

foreach (XmlNode child in xn.SelectNodes("properties"))
            {
                arrd.Add(checkNullValue(child["value"]));
            }
            arrd2.AddRange(arrd);

//For Converting to JSON
 try
            {
                var jobVals = getXmlData("test", "testuser2", "654321", "Sources/soapRequest.xml");
            Response.Write(jobVals.Count);

            //JSONIZE list(the XML)
            string json = JsonConvert.SerializeObject(jobVals);
            Response.Write(json);
        }
        catch (Exception ex)
        {
            Response.Write(ex);
        }

请帮忙。

您提供的 JSON 无效 JSON。你可以在哪里使用

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

使用 Linq XML

XDocument xml = //...

var result = xml.Elements("job")
    .Select(job => job
        .Elements("properties")
        .ToDictionary(p => p.Element("name").Value, p => p.Element("value").Value)
    );

result 将包含一个字典集合,当序列化时,

string json = JsonConvert.SerializeObject(result);

使用类似 Json.Net 的方法将产生所需的结果。

以上示例不包括任何验证检查,但可以轻松添加。该示例只是为了展示如何将数据转换为所需的模型。

在 XSLT 中非常简单:

<xsl:template match="/">[<xsl:apply-templates/>]</xsl:template>
<xsl:template match="job">{<xsl:apply-templates/>}</xsl:template>
<xsl:template match="properties">"<xsl:value-of select="name"/>":"<xsl:value-of select="value"/>"</xsl:template>