问题将JSON反序列化为List

我有一个问题将JSON字符串反序列化为List

TCProject如下:

[JsonObject(MemberSerialization.OptIn)] public class TCProject { public override string ToString() { return Name; } [JsonProperty(PropertyName = "archived")] public bool Archived { get; set; } [JsonProperty(PropertyName = "description")] public string Description { get; set; } [JsonProperty(PropertyName = "href")] public string Href { get; set; } [JsonProperty(PropertyName = "id")] public string Id { get; set; } [JsonProperty(PropertyName = "name")] public string Name { get; set; } [JsonProperty(PropertyName = "webUrl")] public string WebUrl { get; set; } } 

JSON字符串如下所示:

 {"project":[{"name":"GCUK","id":"project11","href":"/httpAuth/app/rest/projects/id:project11"},{"name":"Interiors In Spain","id":"project3","href":"/httpAuth/app/rest/projects/id:project3"}]} 

转换字符串的代码如下:

 public IEnumerable GetAllProjects() { var uri = _connection.CreateUri("/httpAuth/app/rest/projects"); var request = _connection.Request(uri); var projects = JsonConvert.DeserializeObject<List>(request); return projects; } 

我得到的例外:

Newtonsoft.Json.JsonSerialisationException:{“无法将JSON对象反序列化为类型’System.Collections.Generic.List`1 [TCProject]’。”}

我必须要有一些非常容易的东西 – 任何人都有任何想法?

我很确定你是否创建了一个带有一个名为project的属性的类,它是一个List并反序列化到该对象,一切都会正常工作。

 //Using a page "test.aspx" in my existing project (I already had it open) using System; using System.Collections.Generic; using Newtonsoft.Json; public partial class test : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { string s = "{\"project\":[{\"name\":\"GCUK\",\"id\":\"project11\",\"href\":\"/httpAuth/app/rest/projects/id:project11\"},{\"name\":\"Interiors In Spain\",\"id\":\"project3\",\"href\":\"/httpAuth/app/rest/projects/id:project3\"}]}"; var p = JsonConvert.DeserializeObject( s ); s = "this"; //for easy breakpointing } } [JsonObject( MemberSerialization.OptIn )] public class TCProjectWrapper { [JsonProperty( PropertyName = "project" )] private List Project { get; set; } } [JsonObject( MemberSerialization.OptIn )] public class TCProject { public override string ToString() { return Name; } [JsonProperty( PropertyName = "archived" )] public bool Archived { get; set; } [JsonProperty( PropertyName = "description" )] public string Description { get; set; } [JsonProperty( PropertyName = "href" )] public string Href { get; set; } [JsonProperty( PropertyName = "id" )] public string Id { get; set; } [JsonProperty( PropertyName = "name" )] public string Name { get; set; } [JsonProperty( PropertyName = "webUrl" )] public string WebUrl { get; set; } } 

我想在这种情况下你需要抓住JSON的数组部分来反序列化为List,如下所示:

  public IEnumerable GetAllProjects() { var uri = _connection.CreateUri("/httpAuth/app/rest/projects"); var request = _connection.Request(uri); var projects = JsonConvert.DeserializeObject>(request.Substring(11, request.Length - 1)); return projects; }