c# - 在 C# 中遍历 json 对象

标签 c# json json.net

我想创建一个循环来检查我的 Json 对象的条件。我正在寻找一种遍历我的 json 对象的方法:

JSON:

{"tasks":[
        {
            "id":-1,
            "name":"Gantt editor",
            "code":"",
            "level":0,
            "status":"STATUS_ACTIVE",
            "start":1372608000000,
            "duration":21,
            "end":1375113599999,
            "startIsMilestone":true,
            "endIsMilestone":false,
            "collapsed":false,
            "assigs":[]
        },
        {
            "id":"tmp_fk1372575559620",
            "name":"release",
            "code":"",
            "level":1,
            "status":"STATUS_ACTIVE",
            "start":1372608000000,
            "duration":1,
            "end":1372694399999,
            "startIsMilestone":false,
            "endIsMilestone":false,
            "collapsed":false,
            "assigs":[]
        }
        ],       // number of tasks may vary
"selectedRow":8,
"deletedTaskIds":[],
"resources":
    [
        {
        "id":"tmp_1",
        "name":"Resource 1"
        }
    ],
"roles":[
        {
            "id":"tmp_1",
            "name":"Project Manager"
        }
        ],
"canWrite":true,
"canWriteOnParent":true
}

我知道如何映射它,所以让我们假设我按如下方式映射了 Task 和 RootObject:

public class Task
{
    public object id { get; set; }
    public string name { get; set; }
    public string code { get; set; }
    public int level { get; set; }
    public string status { get; set; }
    public object start { get; set; }
    public int duration { get; set; }
    public object end { get; set; }
    public bool startIsMilestone { get; set; }
    public bool endIsMilestone { get; set; }
    public bool collapsed { get; set; }
    public List<object> assigs { get; set; }
}
public class RootObject
{
    public List<Task> tasks { get; set; }
    public int selectedRow { get; set; }
    public List<object> deletedTaskIds { get; set; }
    public List<Resource> resources { get; set; }
    public List<Role> roles { get; set; }
    public bool canWrite { get; set; }
    public bool canWriteOnParent { get; set; }
} // And etc .....

我知道如何手动检查任务,例如第一个任务

Rootobject project = JsonConvert.DeserializeObject<Rootobject>(jsonString);
    Task task = project.tasks.FirstOrDefault(t => t.id == "-1");
    decimal start = Convert.ToDecimal(task.start);
    decimal end = Convert.ToDecimal(task.end);
    decimal prog = Convert.ToDecimal(task.progress);

然后使用任务检查它的所有属性

如何检查所有任务?

提前致谢!

最佳答案

如果你想遍历所有任务,你可以使用:

foreach (var task in project.tasks)
{
    // do some stuff
}

或者您可以使用 LINQ 来过滤它们,如下所示:

foreach (var task in project.tasks.Where(t => t.id == "-1"))
{
    // do some stuff
}

这与您的示例基本相同,唯一不同的是 Where 返回 IEnumerable 而不仅仅是您示例中的 FirstOrDefault 之类的任务。

关于c# - 在 C# 中遍历 json 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18333512/

相关文章:

c# - List<T> 设计模式的名称是什么?如何实现

c# - Array.Copy vs Skip and Take in c#

c# - 在C#中拦截WebBrowser发出的请求

c# - Physics2D.OverlapCircleAll 未检测到其他游戏对象

.net - 如何使用 Erlang 与其他网络应用程序交互?

json - 实现实体组件系统的最佳方式是什么

python - 将大量字典转换为字典

c# - JSON.NET 序列化 - DefaultReferenceResolver 如何比较相等性?

JSON.Net - 将 $type 字段更改为另一个名称?

c# - 处理 JSON.net 中的引用循环