我得到一个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());
}
并给了我一个错误:
将值"用户名"转换为键入时出错 'wpfApplication1.Control.BasicPage1+User'.路径 '',第 1 行,位置 10.
正如其他人所说,你不需要循环来获取你试图反序列化的 json。 从 json 仅转换用户对象的另一种方法:
JObject instaCall = JObject.Parse(responseString);
User searchResult = instaCall["user"].ToObject<User>();
如果这是您的响应字符串,则不必循环访问列表即可取出对象。
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");
我认为
您的问题是您正在循环"用户"对象的子对象。因此,您最终会尝试将每个子对象("用户名"、"生物"等)转换为 User。