使用类似数据解析.NET中的嵌套JSON

时间:2016-01-19 20:16:25

标签: c# .net json nested json.net

我有一个我正在调用的API返回一组JSON。这个特别是给我一套项目。这些项目可以有多个子项目。所有子项目的结构都是相同的,因为它是主要项目。我似乎无法找到任何能告诉我如何解析JSON的内容,以便它在.NET中为我提供某种可用的类,以便我可以在我的网页上显示它。

这是结构(因为原始版本是巨大的并且重命名了项目和数字以便于阅读):

{
"data": [
    {
        "id": 70000,
        "name": "Project 70000",
        "children": [ 
            {
                "id": 71000,
                "name": "Project 71000",
                "children": [
                    {
                        "id": 71100,
                        "name": "Project 71100",
                        "children": [
                            {
                                "id": 71110,
                                "name": "Project 71110",
                                "children": [
                                    {
                                        "id": 71111,
                                        "name": "Project 71111"
                                    },
                                    {
                                        "id": 71112,
                                        "name": "Project 71112"
                                    }
                                 ]
                            }
                        ]
                    }
                ]
            }
        ]
    },
    {
        "id": 80000,
        "name": "Project 80000",
        "children": [
           {
               "id": 81000,
               "name": "Project 81000"
           }
        ]
    }
]
}

我认为我希望我的班级看起来像(我可能在这里错了)是这样的:

public class data 
{
    public List<project> { get; set; }    
}
public class project 
{
    public int id { get; set; }
    public string name { get; set; }
    public List<project> children { get; set; }
}

我正在使用JSON.NET,但是我尝试过的任何事情都没有做任何事情,或者让我遇到无法构建项目的错误。我曾经使用过JSON.NET,当时有一个已定义的结构,但是这个让我循环了!

2 个答案:

答案 0 :(得分:6)

你非常接近。问题似乎是data类中的列表没有属性名称。我将该属性命名为data(以匹配JSON中的属性),然后将该类重命名为对此数据表示的内容有意义的内容。我在这里以ProjectTree为例。

public class ProjectTree
{
    public List<Project> data { get; set; }
}

public class Project
{
    public int id { get; set; }
    public string name { get; set; }
    public List<Project> children { get; set; }
}

然后,像这样反序列化到你的ProjectTree类,它应该可以正常工作:

var root = JsonConvert.DeserializeObject<ProjectTree>(json);

小提琴:https://dotnetfiddle.net/5gmosp

答案 1 :(得分:1)

您可以创建自我关系,例如:

public class Data
{
    public List<Project> data { get; set; }
}

public class Project
{
    public int id { get; set; }
    public string name { get; set; }
    public List<Project> children { get; set; }
}

var _data = JsonConvert.DeserializeObject<Data>(json);