C#JSON.Net通过给定JSON进行迭代

时间:2018-08-21 16:27:31

标签: c# json json.net

我正在挣扎中,我是C#的新手,我已经阅读了很多检索JSON字符串的方法,但是在任何示例中都没有提供这种方法,所以请帮忙。

这是我得到的JSON:

{
"projects": {
    "0": {
        "projectId": "3",
        "title": "Project Title",
        "excerpt": "Far Far Away from somewhere it was a place where blah blah blah",
        "date": "11/04/2018"
    },
    "2": {
        "projectId": "17",
        "title": "New Project Title",
        "excerpt": "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula....",
        "date": "25/06/2018"
    },
    "3": {
        "projectId": "18",
        "title": "Another Project Title",
        "excerpt": "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo\n ligula eget...",
        "date": "06/07/2018"
    }
}

我上了这堂课(不确定是否还可以)

public class PeopleProjects
{
    public List<string> Projects { get; set; }
    public string Id { get; set; }
    public string Title { get; set; }
    public string Excerpt { get; set; }
    public string PublishedDate { get; set; }

}

我应该使用foreach之类的循环吗?如果是这样,怎么办?另外,请注意,每个项目都在一个动态数字内,该数字可以是任意数字,这确实使我发疯,请帮助

谢谢!

1 个答案:

答案 0 :(得分:1)

在我看来,您应该具备:

public class ProjectCollection
{
    [JsonProperty("projects")]
    public Dictionary<string, Project> Projects { get; set; }
}

public class Project
{
    [JsonProperty("projectId")]
    public string Id { get; set; }

    [JsonProperty("title")]
    public string Title { get; set; }

    [JsonProperty("excerpt")]
    public string Excerpt { get; set; }

    [JsonProperty("date")]
    public DateTime PublishedDate { get; set; }
}

然后您可以使用:

var collection = JsonConvert.DeserializeObject<ProjectCollection>(json);
foreach (var project in collection.Projects.Values)
{
    // Use project.Id etc
}

ProjectCollection类对应于您的“根”对象-它需要JSON中的projects属性,然后将projects中的每个属性视为字典中的条目。在上面的foreach循环中,我忽略了该键,但是您始终可以使用:

foreach (var pair in collection.Projects)
{
    Console.WriteLine($"{pair.Key}: {pair.Value.Id}");
}

那将打印:

0: 3
1: 17
2: 18
例如,

带有示例数据。