迭代JToken的最佳方式是什么?

时间:2016-12-18 15:09:35

标签: c# json parsing json.net

我想在Visual Studio 2015中使用C#使用Newtonsoft.Json解析带有未定义结构的JSON(任何可能正确的JSON)。

首先,我阅读JSON并将其解析为JToken:

...
var jsonData = ReadTextFromFile(filename);
var root = JToken.Parse(jsonData);
...

现在,我需要遍历JToken来构建我自己的JsonTreeJsonTreeNode,其中包含有关每个节点的其他信息。

这是我的JsonTreeNode课程:

public class JsonTreeNode
{
    public JsonTreeNode()
    { }

    public JsonTreeNode(string name, string value, bool isArray, List<JsonTreeNode> children, JsonTreeNode parent, SomeAdditionalInfo info)
    {
        Name = name;
        Value = value;
        IsArray = isArray;
        Children = children;
        ParentTreeNode = parent;
        AdditionalInfo = info;
    }
    public string Name { get; set; }
    public string Value { get; set; }
    public bool IsArray { get; set; }
    public JsonTreeNode ParentTreeNode { get; set; }
    public List<JsonTreeNode> Children { get; set; }
    public SomeAdditionalInfo AdditionalInfo { get; set; }
}

转换功能:

private static void ParseJsonToNode(JToken jsonToken, JsonTreeNode treeNode){...}

我不知道如何将每个JToken转换为SomethingElse,以便我可以获得名称和值。

这是一个显示问题的JSON文件:

{
    "name": "Jack",
    "age": 29
}

当我通过foreach或递归解析它时,JToken有:

JToken(name):
-Type: Property
-Name: name
-Value: (Has no value)
-Children: 1
    JToken(Jack)
    -Type: String
    -Name (Has no name)
    -Value: "Jack"
    -Children: 0
JToken(age)
-Type: Property
-Name: age
-Value: (Has no value)
-Children: 1
    JToken(29)
    -Type: Integer
    -Name (Has no name)
    -Value: 29
    -Children: 0

但我不需要两个JTokens用于一个值。我不知道如何以最好的方式合成它们!

0 个答案:

没有答案