我想在Visual Studio 2015中使用C#使用Newtonsoft.Json解析带有未定义结构的JSON(任何可能正确的JSON)。
首先,我阅读JSON并将其解析为JToken:
...
var jsonData = ReadTextFromFile(filename);
var root = JToken.Parse(jsonData);
...
现在,我需要遍历JToken来构建我自己的JsonTree
树JsonTreeNode
,其中包含有关每个节点的其他信息。
这是我的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用于一个值。我不知道如何以最好的方式合成它们!