使用C#将XDocument或XmlDocument转换为JSON

JP *_*ons 3 c# xml json linq-to-xml json.net

我有这个XML很棒:

<Products>
  <Product ProductCode="C1010" CategoryName="Coins" />
  <Product ProductCode="C1012" CategoryName="Coins" />
  <Product ProductCode="C1013" CategoryName="Coins" />
</Products>
Run Code Online (Sandbox Code Playgroud)

但它输出到这个JSON:

{"Products":{"Product":[{"@ProductCode":"C1010","@CategoryName":"Coins"},
                        {"@ProductCode":"C1012","@CategoryName":"Coins"},     
                        {"@ProductCode":"C1013","@CategoryName":"Coins"}]}}
Run Code Online (Sandbox Code Playgroud)

我想在我的json中没有"产品"分级,因为所有三行都是产品.这是我的C#代码:

//x is an XDocument. 
JsonConvert.SerializeXNode(x, Formatting.None, false)
//JsonConvert.SerializeXNode(x); //I also tried without the formatting and the boolean. 
Run Code Online (Sandbox Code Playgroud)

当我'将'XDocument'转换为XmlDocument并使用:

var xmlDocument = new System.Xml.XmlDocument();
using (var xmlReader = x.CreateReader())
{
    xmlDocument.Load(xmlReader);
}
JsonConvert.SerializeXmNode(xmlDocument);
Run Code Online (Sandbox Code Playgroud)

它给了我完全相同的输出.那么如何修改我的JSON解析,以便我有一个简单的产品列表.我更喜欢最干净的解决方案.

或许更清楚一点,我有这样的输出:

[{"@ProductCode":"C1010","@CategoryName":"Coins"},
{"@ProductCode":"C1012","@CategoryName":"Coins"},     
{"@ProductCode":"C1013","@CategoryName":"Coins"}]
Run Code Online (Sandbox Code Playgroud)

Jeh*_*hof 5

使用方法调用

JsonConvert.SerializeXNode(x, Formatting.None, true);
Run Code Online (Sandbox Code Playgroud)

这将省略根节点,并应创建您期望的.