反序列化json容器数组

时间:2017-01-03 02:45:21

标签: c# arrays json.net containers json-deserialization

我试图反序列化的数据非常像这篇文章中的json>

Deserialize JSON Facebook feed using Gson,只有更多的对象,在容器内..而且我不使用“Gson”

我认为有些对象甚至有自己的容器嵌套在某处,但目前这不是问题,主要问题是我在反序列化到下面的类时遇到了问题。

public class Rootobject
{
    public int found { get; set; }
    public Post[] posts { get; set; }
    public Meta meta { get; set; }
}

我理解来自API的json的布局,它是某种数组,在Json.net文档中,他们称之为DataSet ..我使用的是Json.Net

我最近的反序列化尝试是;

List<Rootobject> data = JsonConvert.DeserializeObject<List<Rootobject>>(stringData);

但是数据仍为空,我得到了;

其他信息:

  

无法反序列化当前的JSON对象(例如{“name”:“value”})   进入类型   'System.Collections.Generic.List`1 [WebApplication17.Models.Rootobject]'   因为该类型需要一个JSON数组(例如[1,2,3])来反序列化   正确。

也许LINQ to JSON是不确定的方式..任何建议?

1 个答案:

答案 0 :(得分:1)

第一件事是帖子中的JSON不是有效的JSON字符串,因此无法进行desearlized。其次,我尝试纠正并纠正JSON,使其成为有效的JSON,因此您的JSON看起来像

{
    "data": [
        {
            "id": "105458566194298_411506355589516",
            "message": "...",
            "type": "status",
            "created_time": "2012-11-25T17:26:41+0000",
            "updated_time": "2012-11-25T17:26:41+0000",
            "comments": {
                "count": 0
            }
        },
        {
            "id": "105458566194298_411506355589516",
            "message": "...",
            "type": "status",
            "created_time": "2012-11-25T17:26:41+0000",
            "updated_time": "2012-11-25T17:26:41+0000",
            "comments": {
                "count": 0
            }
        }
    ]
}

所以Classes结构就是这样的

public class Comments
{
    public int count { get; set; }
}
public class Datum
{
    public string id { get; set; }
    public string message { get; set; }
    public string type { get; set; }
    public DateTime created_time { get; set; }
    public DateTime updated_time { get; set; }
    public Comments comments { get; set; }
}
public class MyData
{
    public List<Datum> data { get; set; }
}

然后像你正在做的那样对它进行Desearlize

MyData data = JsonConvert.DeserializeObject<MyData>(stringData);