C# 4.0 JSON.Net SerializeXnode不包括某些节点

C# 4.0 JSON.Net SerializeXnode不包括某些节点,c#-4.0,windows-phone,json.net,C# 4.0,Windows Phone,Json.net,我有一个xml字符串,我正试图使用JSON.Net将其转换为JSON。问题是我只希望JSON字符串中包含xml的某些部分。下面是我使用的代码和我需要的 var x = XDocument.Parse(xmlString); var json = JsonConvert.SerializeXNode(x); 这将转换整个文档。这是json查看器中json字符串的外观 我只希望表(图1中带箭头的表)及其子体位于字符串json中 可能吗?如何实现?我可以将自定义ContractResolver与S

我有一个xml字符串,我正试图使用JSON.Net将其转换为JSON。问题是我只希望JSON字符串中包含xml的某些部分。下面是我使用的代码和我需要的

var x = XDocument.Parse(xmlString);
var json = JsonConvert.SerializeXNode(x);
这将转换整个文档。这是json查看器中json字符串的外观

我只希望表(图1中带箭头的表)及其子体位于字符串json中


可能吗?如何实现?我可以将自定义ContractResolver与SerializeXnode一起使用吗?

您有一个
XDocument
,那么为什么不简单地选择您想要的部分,然后仅序列化该部分呢?
试着这样做:

var doc = XDocument.Parse(xmlString);
var table = doc.XPathSelectElement("//table[@class=\"form\"]");
var json = JsonConvert.SerializeXNode(table);
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);
请注意,
XPathSelectElement
是一个扩展方法,因此需要使用System.Xml.XPath
位于代码顶部(如果您还没有)

编辑

您可以在不使用XPath的情况下这样做:

var doc = XDocument.Parse(xmlString);
var table = doc.XPathSelectElement("//table[@class=\"form\"]");
var json = JsonConvert.SerializeXNode(table);
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);

两种方法得到的结果相同,表加上所有子体。

谢谢您的回答。恐怕我不能使用它,因为system.xml.xpath在Windows应用商店应用程序中不起作用;(除此之外,这种方法是否会给我表的所有子体(我需要,OBS更新了这个问题)还是只给表?非常感谢,我们正在测试这种不同的错误格式;)。将此标记为答案。