3

我是使用 JSON 和 JSON.net 的新手,我在处理 JSON 对象中的 JSON 对象数组时遇到了问题。我使用 JSON.net 作为我见过的其他示例,使它看起来很容易使用。

我正在从 Internet 下载以下 JSON 字符串:

{"count":2,"data":[{"modifydate":12345,"key":"abcdef", "content":"test file 1"},{"modifydate":67891,"key":"ghjikl", "content":"test file 2"}]}

我知道它需要反序列化,为此我需要一个我编写的 JSON 类:

    public class NOTE
    {
        [JsonProperty(PropertyName = "count")]
        public int count { get; set; }

        [JsonProperty(PropertyName = "key")]
        public string key { get; set; }

        [JsonProperty(PropertyName = "modifydate")]
        public float modifydate { get; set; }

        [JsonProperty(PropertyName = "content")]
        public string modifydate { get; set; }

    }

所以我反序列化它使用:

NOTE note = JsonConvert.DeserializeObject<NOTE>(e.Result);

这很好用,因为我可以访问 count 属性并很好地读取它,但是 data 属性中的所有内容我都不能。在我看来,这是一个 JSON 对象数组,我遇到了麻烦,我希望能够获得一个列表,例如,所有“键”值或所有“内容”字符串。

我从这里尝试了很多方法,但似乎没有任何效果/我无法找到与我完全一样的情况,我可以与之比较。

如果有人能帮我一把,那就太好了:)

4

1 回答 1

3

您的 JSON 具有嵌套对象,而您尝试反序列化的对象没有嵌套对象。您需要适当的层次结构才能正常工作:

public class Note
{
    [JsonProperty(PropertyName = "count")]
    public int Count { get; set; }

    [JsonProperty(PropertyName = "data")]
    public Data[] Data { get; set; }
}

public class Data
{
    [JsonProperty(PropertyName = "modifydate")]
    public float ModifyDate { get; set; }

    [JsonProperty(PropertyName = "key")]
    public string Key { get; set; }

    [JsonProperty(PropertyName = "content")]
    public string Content { get; set; }
}

现在您应该能够正确反序列化事物:

var note = JsonConvert.DeserializeObject<Note>(e.Result);
// loop through the Data elements and show content

foreach(var data in note.Data)
{
    Console.WriteLine(data.content);
}
于 2012-04-29T02:04:08.060 回答