通过动态json解析

时间:2017-11-07 21:02:00

标签: c# json json.net

我正在构建一个用于从各个供应商导入产品的导入系统,并且应用程序必须符合供应商提供的任何内容,因此没有标准化列。我有一个mongodb集合有一个映射到什么

例如,供应商A已将sku绑定到代码,但供应商B可将其称为itemCode

所以当我解析我的json数据时,我怎么能够动态地告诉我的应用程序sku是那个字段?

我希望能够像我正在为使用xml的供应商做的那样,就像

doc.LoadXml(content);
XmlNodeList itemPath = doc.SelectNodes(Config.XmlItemPath);

foreach (XmlNode item in itemPath)
{
    Console.WriteLine(item[MapToValue("CurrencyCode")]?.InnerText);
}

我还没有看到过Json.NET的这种方式,所以我很难理解如何轻松解析这些数据。

2 个答案:

答案 0 :(得分:0)

我决定将json转换为xml,因为xml在.NET中具有更多的灵活性

var doc = JsonConvert.DeserializeXmlNode(content, "root");

XmlNodeList itemPath = doc.SelectNodes(Config.XmlItemPath);

if (itemPath == null) throw new Exception("Invalid XML Path.");
{
    foreach (XmlNode row in itemPath)
    {
        Console.WriteLine(row[GetJsonProperty("Brand")]?.InnerText);
    }
}

这正是我现在想要的,我很乐意听到如何在不转换为xml的情况下进行操作,但这会让我继续前进。

答案 1 :(得分:0)

查看Json.Net的LINQ-to-JSON API。您可以用它编写非常相似的代码:

JToken root = JToken.Parse(jsonContent);
IEnumerable<JToken> itemTokens = root.SelectTokens(Config.JsonItemPath);
foreach (JToken item in itemTokens)
{
    Console.WriteLine(item[MapToValue("CurrencyCode")]?.ToString());
}

API Reference