You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core 6中ReadFromJsonAsync<T>反序列化嵌套类数据丢失

问题描述

在ASP.NET Core 6中调用response.Content.ReadFromJsonAsync<T>()方法时,响应对象无法正确反序列化。原本包含20个Column对象的AvailableColumns实例,执行该方法后Columns集合变为空。

相关实体类定义

public class AvailableColumns
{
    public List<Column> Columns { get;  } = new List<Column>();
}

public class Column
{
    public string Name { get; set; }
    public List<Value> Values { get; set; } = new List<Value>();
}
public class Value       
{
    public string InternalValue { get; set; }
    public string DisplayName { get; set; }
}

执行代码

// 执行前对象T包含20个columns
response.Data = await response.Content.ReadFromJsonAsync<T>();
// 执行后response.Data的columns数量为0
解决方案

问题核心是AvailableColumns类的Columns属性仅有getter,无setter。ASP.NET Core 6默认使用的System.Text.Json序列化器,需要属性具备可访问的setter才能完成反序列化赋值,否则无法将JSON中的数据填充到集合中。

可通过以下方式解决:

  • 给Columns属性添加公共setter:
    public class AvailableColumns
    {
        public List<Column> Columns { get; set; } = new List<Column>();
    }
    
  • 若不想对外暴露setter,可添加私有setter,序列化器仍能正常访问:
    public class AvailableColumns
    {
        public List<Column> Columns { get; private set; } = new List<Column>();
    }
    

额外检查项:确认返回的JSON结构与实体类匹配,System.Text.Json默认区分大小写。如果JSON中的键是小写的"columns",需通过特性映射:

using System.Text.Json.Serialization;

public class AvailableColumns
{
    [JsonPropertyName("columns")]
    public List<Column> Columns { get; set; } = new List<Column>();
}

内容的提问来源于stack exchange,提问作者HelloWorld

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 09:05:23