JSON.Net SerializeXnode不包括某些节点

时间:2013-10-08 15:55:40

标签: c#-4.0 windows-phone json.net

我有一个xml字符串,我正在尝试使用JSON.Net转换为JSON。问题是我只想在我的JSON字符串中使用此xml的某些部分。以下是我使用的代码和我需要的代码。

var x = XDocument.Parse(xmlString);
var json = JsonConvert.SerializeXNode(x);

这将转换整个doc。这就是JSON字符串在JSON Viewer中的样子 enter image description here

我想要的只是桌子(图片1中的箭头)和它的后代在字符串json内。

有可能吗?怎么实现呢?我可以将自定义的ContractResolver与SerializeXnode一起使用吗?

1 个答案:

答案 0 :(得分:3)

你有一个XDocument,那为什么不简单地选择你想要的部分然后序列化那个部分?
尝试这样的事情:

var doc = XDocument.Parse(xmlString);
var table = doc.XPathSelectElement("//table[@class=\"form\"]");
var json = JsonConvert.SerializeXNode(table);

请注意XPathSelectElement是一种扩展方法,因此如果您还没有using System.Xml.XPath;,则需要在代码顶部使用XPath

修改

你可以不用var doc = XDocument.Parse(xmlString); var table = root.Descendants(XName.Get("table")) .Where(e => e.Attributes(XName.Get("class")) .Select(a => a.Value) .FirstOrDefault() == "form") .First(); var json = JsonConvert.SerializeXNode(table); 这样做:

{{1}}

两种方法都给出相同的结果,表格加上所有后代。