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

时间:2018-08-06 03:07:42

标签: c# json xml xmlnode

我有这样的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);
        }

请帮助。

3 个答案:

答案 0 :(得分:4)

使用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之类的东西,将产生所需的结果。

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

在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>