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

反序列化复杂JSON对象失败:Result.Data始终为null的问题排查

问题:Result.Data属性反序列化后始终为null

我已经简化了代码,但始终找不到Result.Data属性无法赋值、一直为null的原因。JSON内容(包括这个小示例和完整内容)已经验证过是有效的,而且参考相关教程搭建的独立项目能成功序列化其中的复杂对象,但当前场景就是无法正常运行。

代码示例

using System.Text.Json;

namespace JsonTest2;

public class Result
{
    public string? Total { get; set; }
    public string? Limit { get; set; }
    public string? Start { get; set; }
    protected List<Park>? Data { get; set; }
}

public class Park
{
    public string? Id { get; set; }
}

internal class Program
{
    var basepath = AppDomain.CurrentDomain.BaseDirectory;
    var filepath = basepath.Split("\\bin")[0];
    var filename = @$"{filepath}\\NPS_response_small.json";
    var jsonstr = File.ReadAllText(filename);

    var response = JsonSerializer.Deserialize<Result>(jsonstr, new JsonSerializerOptions() { PropertyNameCaseInsensitive = true });
}

JSON内容

{
  "total": "468",
  "limit": "50",
  "start": "0",
  "data": [
    {
      "id": "77E0D7F0-1942-494A-ACE2-9004D2BDC59E"
    },
    {
      "id": "6DA17C86-088E-4B4D-B862-7C1BD5CF236B"
    },
    {
      "id": "E4C7784E-66A0-4D44-87D0-3E072F5FEF43"
    }
  ]
}

解决方案

问题的核心在于System.Text.Json默认只处理公共(public)成员,而你的Result类中Data属性使用了protected修饰符,反序列化器无法访问并赋值这个属性。

修复方式1:修改属性为public

直接把Data的修饰符改成public,这是最直接的解决方案:

public class Result
{
    public string? Total { get; set; }
    public string? Limit { get; set; }
    public string? Start { get; set; }
    public List<Park>? Data { get; set; }
}

修复方式2:保留protected并添加特性

如果确实需要保持protected访问级别,可以给Data属性添加[JsonInclude]特性,让序列化器识别这个成员:

using System.Text.Json.Serialization; // 需要引入这个命名空间

public class Result
{
    public string? Total { get; set; }
    public string? Limit { get; set; }
    public string? Start { get; set; }
    [JsonInclude]
    protected List<Park>? Data { get; set; }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 03:41:41