Json数据删除不需要的元素

时间:2016-04-18 15:33:27

标签: c# json xml tags

我在从XML转换的一些json中有以下内容:

"ForSaleStatus":{"items":{"item":{"label":"Not For Sale","value":"2"}}}

这是从下拉列表生成的应用程序的一些xml。我想在C#中将其转换为此内容:

"ForSaleStatus":"2"

这是我到目前为止的代码:

var xml = i;
var root = XElement.Parse(xml);

// remove ALL empty elements such as <items/>
root.Descendants().Where(e => string.IsNullOrEmpty(e.Value)).Remove();

// convert the node to JSON for easier processing
var json = JsonConvert.SerializeXNode(root);

任何人都可以想到转换json的方法,还是我最好回到XML并继续研究?

XML看起来像这样:

<ForSaleStatus>
  <items>
    <item>
       <label>Not For Sale</label>
       <value>2</value>
    </item>
  </items>
</ForSaleStatus>

1 个答案:

答案 0 :(得分:1)

提取所需的值会更容易,只需从中构造json:

var json = JsonConvert.SerializeObject(new Dictionary<string, string>
{
    [root.Name.ToString()] = root.XPathSelectElement("items/item/value").Value
});

如果您没有为您编译,请使用以下旧语法:

var json = JsonConvert.SerializeObject(new Dictionary<string, string>
{
    { root.Name.ToString(), root.XPathSelectElement("items/item/value").Value }
});

编辑:如果您需要所有项目的值:

var json = JsonConvert.SerializeObject(root
    .XPathSelectElements("items/item")
    .ToDictionary(
        x => x.XPathSelectElement("label").Value,
        x => x.XPathSelectElement("value").Value
    ));