C# 如何将非数组json反序列化到实现List的子类<;T>;?

C# 如何将非数组json反序列化到实现List的子类<;T>;?,c#,json,deserialization,C#,Json,Deserialization,我有以下课程: public class PagedClientModelList<T> : List<T> { public int TotalCount { get; set; } public int PageSize { get; set; } public int CurrentPage { get; set; } public int TotalPages { get; set; } } 但是,当我想要反序列化标头(非数组js

我有以下课程:

public class PagedClientModelList<T> : List<T>
{
    public int TotalCount { get; set; }
    public int PageSize { get; set; }
    public int CurrentPage { get; set; }
    public int TotalPages { get; set; }
}
但是,当我想要反序列化标头(非数组json)时,jsonConverter想要再次反序列化到
列表
,并引发异常,但我需要将其序列化到子类
PagedClient Modelist


如何将非数组json反序列化到实现
列表的子类?

为了向前推进,我实现了以下解决方法:

public class PagedClientModelList<T> : List<T>
{
    public PaginationMetadata PaginationMetadata { get; set; }
}

public class PaginationMetadata
{
    public int TotalCount { get; set; }
    public int PageSize { get; set; }
    public int CurrentPage { get; set; }
    public int TotalPages  { get; set; }
}
public类PagedClientModelList:列表
{
公共分页元数据分页元数据{get;set;}
}
公共类分页元数据
{
公共整数TotalCount{get;set;}
公共int PageSize{get;set;}
public int CurrentPage{get;set;}
公共整型TotalPages{get;set;}
}
现在我可以毫无问题地反序列化:

var result = JsonConvert.DeserializeObject<PagedClientModelList<Person>>
                 (httpResponseMessage.Content.ReadAsStringAsync().Result);

if (httpResponseMessage.Headers.TryGetValues("X-Pagination", out var xPagination))
{
    result.PaginationMetadata = JsonConvert.DeserializeObject<PaginationMetadata>(xPagination.First());
}
var result=JsonConvert.DeserializeObject
(httpResponseMessage.Content.ReadAsStringAsync().Result);
if(httpResponseMessage.Headers.TryGetValues(“X-Pagination”,out-var-xPagination))
{
result.PaginationMetadata=JsonConvert.DeserializeObject(xPagination.First());
}

好的,这里有一个替代方案,稍微改变一下您的型号:

public class Person
{
    [JsonProperty("id")]
    public int Id { get; set; }

    [JsonProperty("name")]
    public string Name { get; set; }
}

public class PagedClientModelList<T> where T : class, new()
{
    [JsonProperty("totalCount")]
    public int TotalCount { get; set; }

    [JsonProperty("pageSize")]
    public int PageSize { get; set; }

    [JsonProperty("currentPage")]
    public int CurrentPage { get; set; }

    [JsonProperty("totalPages")]
    public int TotalPages { get; set; }

    [JsonProperty("content")]
    public List<T> Content { get; set; }

    public PagedClientModelList()
    {
        Content = new List<T>();
    }
}
公共类人物
{
[JsonProperty(“id”)]
公共int Id{get;set;}
[JsonProperty(“名称”)]
公共字符串名称{get;set;}
}
公共类PagedClient模型,其中T:class,new()
{
[JsonProperty(“totalCount”)]
公共整数TotalCount{get;set;}
[JsonProperty(“页面大小”)]
公共int PageSize{get;set;}
[JsonProperty(“currentPage”)]
public int CurrentPage{get;set;}
[JsonProperty(“totalPages”)]
公共整型TotalPages{get;set;}
[JsonProperty(“内容”)]
公共列表内容{get;set;}
公共页面客户端模型()
{
内容=新列表();
}
}
测试代码:

class Program
{
    static void Main(string[] args)
    {
        string header = @"{
""totalCount"": 12,
""pageSize"": 3,
""currentPage"": 1,
""totalPages"": 4
}";

        string content = @"[
{
    ""id"": 1,
    ""name"": ""Hans""
},
{
    ""id"": 2,
    ""name"": ""Peter""
},
{
    ""id"": 3,
    ""name"": ""Max""
}
]";

        var modelList = JsonConvert.DeserializeObject<PagedClientModelList<Person>>(header);
        modelList.Content = JsonConvert.DeserializeObject<List<Person>>(content);

        Console.ReadKey();
    }
}
类程序
{
静态void Main(字符串[]参数)
{
字符串头=@“{
“totalCount”:12,
“页面大小”:3,
“当前页面”:1,
“总页数”:4
}";
字符串内容=@“[
{
“id”:1,
“姓名”:“汉斯”
},
{
“id”:2,
“姓名”:“彼得”
},
{
“id”:3,
“名称”:“最大值”
}
]";
var modelList=JsonConvert.DeserializeObject(头);
modelList.Content=JsonConvert.DeserializeObject(内容);
Console.ReadKey();
}
}

您真的需要从列表中派生吗?您还有什么建议吗?谢谢您的输入!:-)这类似于我的解决方法,我将标题封装到它自己的字段中,而您将内容封装到它自己的字段中。Np,我很高兴我能提供帮助:-)
public class PagedClientModelList<T> : List<T>
{
    public PaginationMetadata PaginationMetadata { get; set; }
}

public class PaginationMetadata
{
    public int TotalCount { get; set; }
    public int PageSize { get; set; }
    public int CurrentPage { get; set; }
    public int TotalPages  { get; set; }
}
var result = JsonConvert.DeserializeObject<PagedClientModelList<Person>>
                 (httpResponseMessage.Content.ReadAsStringAsync().Result);

if (httpResponseMessage.Headers.TryGetValues("X-Pagination", out var xPagination))
{
    result.PaginationMetadata = JsonConvert.DeserializeObject<PaginationMetadata>(xPagination.First());
}
public class Person
{
    [JsonProperty("id")]
    public int Id { get; set; }

    [JsonProperty("name")]
    public string Name { get; set; }
}

public class PagedClientModelList<T> where T : class, new()
{
    [JsonProperty("totalCount")]
    public int TotalCount { get; set; }

    [JsonProperty("pageSize")]
    public int PageSize { get; set; }

    [JsonProperty("currentPage")]
    public int CurrentPage { get; set; }

    [JsonProperty("totalPages")]
    public int TotalPages { get; set; }

    [JsonProperty("content")]
    public List<T> Content { get; set; }

    public PagedClientModelList()
    {
        Content = new List<T>();
    }
}
class Program
{
    static void Main(string[] args)
    {
        string header = @"{
""totalCount"": 12,
""pageSize"": 3,
""currentPage"": 1,
""totalPages"": 4
}";

        string content = @"[
{
    ""id"": 1,
    ""name"": ""Hans""
},
{
    ""id"": 2,
    ""name"": ""Peter""
},
{
    ""id"": 3,
    ""name"": ""Max""
}
]";

        var modelList = JsonConvert.DeserializeObject<PagedClientModelList<Person>>(header);
        modelList.Content = JsonConvert.DeserializeObject<List<Person>>(content);

        Console.ReadKey();
    }
}