C#JSON错误(将值“username”转换为类型时出错)

时间:2014-01-03 22:35:02

标签: c# json json.net

我收到了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。

3 个答案:

答案 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)

我认为您的问题是您正在遍历“用户”对象的子项。因此,您最终会尝试将每个子对象(“用户名”,“生物”等)转换为用户。