我收到了JSON回复Instagram和“序列化部分JSON片段”。
JSON回复
{
"access_token": "Here token",
"user": {
"username": "here user name",
"bio": "her bio.",
"website": "her website",
"profile_picture": "http://images.ak.instagram.com/profiles/here picture",
"full_name": "her name",
"id": "and her id"
}
}
我创建了一个用户类:
public class User
{
public string id { get; set; }
public string username { get; set; }
public string full_name { get; set; }
public string profile_picture { get; set; }
}
序列化
JObject instaCall = JObject.Parse(responseString);
IList<JToken> results = instaCall["user"].Children().ToList();
foreach (JToken apiResult in results)
{
User searchResult = JsonConvert.DeserializeObject<User>(apiResult.ToString());
}
并给我一个错误:
将值“username”转换为type时出错 'WpfApplication1.Control.BasicPage1 +用户'。路径'',第1行,位置 10。
答案 0 :(得分:4)
正如其他人所说的那样,你不需要循环访问你想要反序列化的json。另一种从json转换用户对象的方法:
JObject instaCall = JObject.Parse(responseString);
User searchResult = instaCall["user"].ToObject<User>();
答案 1 :(得分:2)
如果这是你的响应字符串,你不应该循环遍历列表来获取对象。
User searchResult = JsonConvert.DeserializeObject<User>(instaCall["user"].ToString());
修改强>
如果它可行,我可能会建立一个响应对象来处理反序列化清理程序。
public class Response
{
public string access_token { get; set; }
public User user { get; set; } //your existing class
}
然后做
Response searchResult = JsonConvert.DeserializeObject<Response>("whole Response");
答案 2 :(得分:0)
我认为您的问题是您正在遍历“用户”对象的子项。因此,您最终会尝试将每个子对象(“用户名”,“生物”等)转换为用户。