我有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\"}]}"
请有人告诉我,我的错误在哪里。提前谢谢。
答案 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; }
}