【问题标题】:Json data remove unwanted elementsJson 数据删除不需要的元素
【发布时间】:2016-04-18 15:33:27
【问题描述】:

我从 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>

【问题讨论】:

  • 你能提供应用程序的原始xml吗?
  • 已编辑帖子。在我第一次提交后,我意识到这是必需的。也许您在我编辑时发表了评论?你现在能看到吗?我想将它们从 XML 中剥离可能更明智?

标签: c# json xml tags


【解决方案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
    ));

【讨论】:

  • 非常感谢,是的,这样就可以了。我将重新编写我的代码,并去掉我想要的值并以这种方式构建它。干杯。
  • 这只是针对这个问题的硬编码解决方案。顺便说一句,ForSaleStatus 是否包含超过 1 个项目并且您需要所有这些项目?
  • 谢谢,太好了。 ForSaleStatus 只有一个项目,因为它是一个生成数据的单一选择下拉列表。在这项工作中,让代码过于优雅是没有意义的,因为我只需要一次点击即可提取数据。但是非常感谢您的帮助。
猜你喜欢
  • 2017-09-25
  • 1970-01-01
  • 2021-09-23
  • 2018-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多