这是我简单的UserPOCO类:
User
/// <summary> /// The User class represents a Coderwall User. /// </summary> public class User { /// <summary> /// A User's username. eg: "sergiotapia, mrkibbles, matumbo" /// </summary> public string Username { get; set; } /// <summary> /// A User's name. eg: "Sergio Tapia, John Cosack, Lucy McMillan" /// </summary> public string Name { get; set; } /// <summary> /// A User's location. eh: "Bolivia, USA, France, Italy" /// </summary> public string Location { get; set; } public int Endorsements { get; set; } //Todo. public string Team { get; set; } //Todo. /// <summary> /// A collection of the User's linked accounts. /// </summary> public List<Account> Accounts { get; set; } /// <summary> /// A collection of the User's awarded badges. /// </summary> public List<Badge> Badges { get; set; } }
以及用于将JSON响应反序列化为User对象的方法(此实际JSON调用在此处):
private User LoadUserFromJson(string response) { var outObject = JsonConvert.DeserializeObject<User>(response); return outObject; }
这会引发异常:
无法反序列化当前JSON对象(例如{“ name”:“ value”})为类型’System.Collections.Generic.List`1 [CoderwallDotNet.Api.Models.Account]’,因为该类型需要JSON数组(例如[ 1,2,3])正确反序列化。 要解决此错误,可以将JSON更改为JSON数组(例如[1,2,3]),也可以更改反序列化类型,使其成为普通的.NET类型(例如,不像整数这样的原始类型,也不像这样的集合类型)数组或列表),可以从JSON对象反序列化。还可以将JsonObjectAttribute添加到类型中,以强制其从JSON对象反序列化。路径“ accounts.github”,第1行,位置129。
无法反序列化当前JSON对象(例如{“ name”:“ value”})为类型’System.Collections.Generic.List`1 [CoderwallDotNet.Api.Models.Account]’,因为该类型需要JSON数组(例如[ 1,2,3])正确反序列化。
要解决此错误,可以将JSON更改为JSON数组(例如[1,2,3]),也可以更改反序列化类型,使其成为普通的.NET类型(例如,不像整数这样的原始类型,也不像这样的集合类型)数组或列表),可以从JSON对象反序列化。还可以将JsonObjectAttribute添加到类型中,以强制其从JSON对象反序列化。路径“ accounts.github”,第1行,位置129。
以前从未使用过此DeserializeObject方法,因此我有点卡在这里。
我确保POCO类中的属性名称与JSON响应中的名称相同。
我如何尝试将JSON反序列化到此POCO类中?
这是一个工作示例。
关键点是:
Accounts
JsonProperty
。
using (WebClient wc = new WebClient()) { var json = wc.DownloadString("http://coderwall.com/mdeiters.json"); var user = JsonConvert.DeserializeObject<User>(json); }
--
public class User { /// <summary> /// A User's username. eg: "sergiotapia, mrkibbles, matumbo" /// </summary> [JsonProperty("username")] public string Username { get; set; } /// <summary> /// A User's name. eg: "Sergio Tapia, John Cosack, Lucy McMillan" /// </summary> [JsonProperty("name")] public string Name { get; set; } /// <summary> /// A User's location. eh: "Bolivia, USA, France, Italy" /// </summary> [JsonProperty("location")] public string Location { get; set; } [JsonProperty("endorsements")] public int Endorsements { get; set; } //Todo. [JsonProperty("team")] public string Team { get; set; } //Todo. /// <summary> /// A collection of the User's linked accounts. /// </summary> [JsonProperty("accounts")] public Account Accounts { get; set; } /// <summary> /// A collection of the User's awarded badges. /// </summary> [JsonProperty("badges")] public List<Badge> Badges { get; set; } } public class Account { public string github; } public class Badge { [JsonProperty("name")] public string Name; [JsonProperty("description")] public string Description; [JsonProperty("created")] public string Created; [JsonProperty("badge")] public string BadgeUrl; }