4

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);

次に、タスクを使用してすべての属性を確認します

すべてのタスクを確認するにはどうすればよいですか?

前もって感謝します !

4

2 に答える 2

5

すべてのタスクを反復処理する場合は、次を使用できます。

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

または、次のように LINQ を使用してフィルター処理することもできます。

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

これは基本的にあなたの例と同じですが、例の FirstOrDefault のような Task だけでなく Where が IEnumerable を返すという違いのみがあります。

于 2013-08-20T11:33:48.623 に答える