在C#中获取json数据

时间:2014-08-18 08:18:51

标签: c# json

我有json需要从c#语言中获取json的值。通常我通过创建类从json获取数据,这是工作。但是现在,当我使用相同的方式从JSON获取值时,会出现错误。那个错误是:

'string' does not contain a definition for 'data'

我不确定我的错误在哪里。这就是我从JSON获得价值的方式,据说它是有效的。班级:

public class InstaComments
{
    public Data[] data { get; set; }
    public class Data
    {
        public string created_time { get; set; }
        public string text { get; set; }
        public string full_name { get; set; }
    }
}

错误出现在这行代码中:

List dyn = JsonConvert.DeserializeObject>(resultComments.data.ToString());//error on here

这是我的Json代码:

"{\"meta\":{\"code\":200},\"data\":{\"created_time\":\"1406056452\",\"text\":\"Cool!\",\"from\":{\"username\":\"s19xx_\",\"profile_picture\":\"http:\\/\\/photos-d.ak.instagram.com\\/hphotos-ak-xaf1\\/10499142_1462797113973499_926138390_a.jpg\",\"id\":\"445755252\",\"full_name\":\"\\ud83d\\udc97\"},\"id\":\"770379817908166709\"},{\"created_time\":\"1406423741\",\"text\":\"Nice pic!\",\"from\":{\"username\":\"zaffique\",\"profile_picture\":\"http:\\/\\/images.ak.instagram.com\\/profiles\\/profile_143827767_75sq_1378666562.jpg\",\"id\":\"143827767\",\"full_name\":\"Chaperone molecule\\u2122\"},\"id\":\"773460860856951112\"},{\"created_time\":\"1406466052\",\"text\":\"@zaffique yeahhh\",\"from\":{\"username\":\"anakshawal\",\"profile_picture\":\"http:\\/\\/photos-g.ak.instagram.com\\/hphotos-ak-xaf1\\/10584712_1532798830282582_253819990_a.jpg\",\"id\":\"22545759\",\"full_name\":\"\"},\"id\":\"773815792877429301\"},{\"created_time\":\"1406509023\",\"text\":\"Good shot!\",\"from\":{\"username\":\"c_uniqueroom\",\"profile_picture\":\"http:\\/\\/photos-e.ak.instagram.com\\/hphotos-ak-xfp1\\/10547229_328439730654500_459648312_a.jpg\",\"id\":\"456088491\",\"full_name\":\"C_uniqueroom\"},\"id\":\"774176262612312566\"},{\"created_time\":\"1408277876\",\"text\":\"Lol\",\"from\":{\"username\":\"adieruddinwanahmad\",\"profile_picture\":\"http:\\/\\/photos-e.ak.instagram.com\\/hphotos-ak-xpa1\\/10471808_1459922647581324_961927518_a.jpg\",\"id\":\"355537664\",\"full_name\":\"wan adieruddin wan ahmad\"},\"id\":\"789014471007527397\"},{\"created_time\":\"1408279167\",\"text\":\"@adieruddinwanahmad he is almost there\",\"from\":{\"username\":\"anakshawal\",\"profile_picture\":\"http:\\/\\/photos-g.ak.instagram.com\\/hphotos-ak-xaf1\\/10584712_1532798830282582_253819990_a.jpg\",\"id\":\"22545759\",\"full_name\":\"\"},\"id\":\"789025304592769150\"},{\"created_time\":\"1408310569\",\"text\":\"Please @anakshawal  I can be distressed about this situation he really badly guy\",\"from\":{\"username\":\"adieruddinwanahmad\",\"profile_picture\":\"http:\\/\\/photos-e.ak.instagram.com\\/hphotos-ak-xpa1\\/10471808_1459922647581324_961927518_a.jpg\",\"id\":\"355537664\",\"full_name\":\"wan adieruddin wan ahmad\"},\"id\":\"789288719299108925\"}]}"

请有人告诉我,我的错误在哪里。提前谢谢。

4 个答案:

答案 0 :(得分:1)

从它看来,你的JSON不是JSON,它是一个可以解析为JSON的字符串。

要使用相同的数据源获取它,您需要对其进行两次反序列化。一次获取字符串,另一次从字符串中获取JSON。

更好的方法是获取发送JSON的任何内容,而不是将其包含在字符串中。这可能就像不在.ToString上调用resultComments.data一样简单,但更有可能的是,您的数据来源无意中将JSON转换为单个字符串。

答案 1 :(得分:1)

您的resultComments变量似乎是字符串。所以它没有像data或meta这样的属性。您必须首先反序列化此字符串,然后从反序列化的对象中获取数据:

dynamic comments = JsonConvert.DeserializeObject(resultComments);
dynamic data = comments.data; // Your data is here

答案 2 :(得分:0)

看起来你的json字符串与你的对象不匹配。

{
 "data": [
        {
            "created_time": "1406056452",
            "text": "Cool!",
            "from": {
                "username": "s19xx_",
                "profile_picture": "http://photos-d.ak.instagram.com/hphotos-ak-xaf1/10499142_1462797113973499_926138390_a.jpg",
                "id": "445755252",
                "full_name": "\\ud83d\\udc97"
            },
            "id": "770379817908166709"
        }
    ]
}

通过适当的缩进和转义,这就是你的JSON的样子。这与您上面给出的数据对象完全不匹配。更具体地说,您的数据对象缺少id属性,您需要将full_name字符串替换为from对象的实现。

答案 3 :(得分:0)

根据Nate Kerkhofs的回答,可以很容易地看出你的Json数据与你的班级不符。

使用this link,您可以看到它看起来更像是这样:

public class From
{
    public string username { get; set; }
    public string profile_picture { get; set; }
    public string id { get; set; }
    public string full_name { get; set; }
}

public class Datum
{
    public string created_time { get; set; }
    public string text { get; set; }
    public From from { get; set; }
    public string id { get; set; }
}

public class RootObject
{
    public List<Datum> data { get; set; }
}