c# - 将 JSON 反序列化为 List<T> 时出现问题

标签 c# json deserialization

我在将 JSON 字符串反序列化为列表时遇到问题

TCP项目如下:

[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<TCProject> GetAllProjects()
        {
            var uri = _connection.CreateUri("/httpAuth/app/rest/projects");
            var request = _connection.Request(uri);

            var projects = JsonConvert.DeserializeObject<List<TCProject>>(request);

    return projects;
}

我遇到的异常:

Newtonsoft.Json.JsonSerialisationException: {"Cannot deserialize JSON object into type '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<TCProjectWrapper>( s );
        s = "this"; //for easy breakpointing
    }
}
[JsonObject( MemberSerialization.OptIn )]
public class TCProjectWrapper {
    [JsonProperty( PropertyName = "project" )]
    private List<TCProject> 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; }
}

关于c# - 将 JSON 反序列化为 List<T> 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6657984/

相关文章:

c# - 在 Xamarin.Forms 的 WPF 预览中使用本地镜像

c# - 如何获取 Facebook 应用程序的当前在线用户列表?

json - “表达类型是模棱两可的,没有更多上下文”, swift 3

无法反序列化访问实例字段和方法的 Java 8 lambda

c# - DataContractJsonSerializer 泛型列表包含元素类型的子类型

c# - WPF ListBox 模板绑定(bind)仅在滚动时更新

c# - WPF、MVVM、NUnit 和线程……我做错了吗

javascript - 序列化 JSON MVC 类型的对象时检测到循环引用

php - jQuery 可以应用于 jQuery 生成的内容吗?

c# - 使用 xsi :nil ="true" in C# 反序列化 XML 元素