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

.NET 6中JsonSerializer.Deserialize返回含空对象数组的问题

问题分析与修复方案

核心问题1:类属性访问权限不足

你的MemberRoster类中,HealthId属性是默认私有访问权限,而System.Text.Json序列化器只能访问**公共(public)**属性,导致无法将JSON中的值赋值给该属性,最终得到空对象数组。

核心问题2:HTTP请求调用方式错误

代码里await httpClient.GetAsync(memberUri).Result存在严重问题:.Result会阻塞线程,叠加await极易引发死锁,正确做法是直接await异步方法。

核心问题3:JSON结构与目标类型不匹配(根据截图推断)

从JSON截图来看,返回的JSON根对象并非直接的成员数组,而是包含members数组的对象(格式类似{"members": [{"health_id": "...", ...}]})。直接反序列化成IEnumerable<MemberRoster>会因结构不匹配导致解析失败。


修复后的完整代码

1. 定义匹配JSON结构的根对象类

public class MemberResponse
{
    [JsonPropertyName("members")]
    public IEnumerable<MemberRoster> Members { get; set; }
}

public class MemberRoster
{
    [JsonPropertyName("health_id")]
    public string HealthId { get; set; } // 修改为public访问权限
}

2. 修复HTTP请求与反序列化逻辑

public async Task<IEnumerable<MemberRoster>> GetAsync(string groupNumber)
{
    var httpClient = _httpClientFactory.CreateClient();
    httpClient.DefaultRequestHeaders.Accept.Clear();
    httpClient.DefaultRequestHeaders.Add("client_id", Configuration["Microservices:RequestHeaders:client_id"]);
    httpClient.DefaultRequestHeaders.Add("client_secret", Configuration["Microservices:RequestHeaders:client_secret"]);

    var queryParams = new Dictionary<string, string>()
    {
        ["groupNumber"] = groupNumber
    };

    var memberUri = QueryHelpers.AddQueryString(Configuration["Microservices:Member"], queryParams);
    var response = await httpClient.GetAsync(memberUri); // 移除.Result,直接await
    response.EnsureSuccessStatusCode(); // 建议添加,确保请求成功
    var responseContent = await response.Content.ReadAsStringAsync();
    
    // 先反序列化成根对象,再取出成员数组
    var memberResponse = JsonSerializer.Deserialize<MemberResponse>(responseContent);
    
    return memberResponse?.Members ?? Enumerable.Empty<MemberRoster>();
}

额外验证建议

  • 可以将responseContent输出到日志或控制台,确认JSON字符串的实际结构,确保根对象类的定义完全匹配。
  • 如果JSON中还有其他需要解析的字段,只需在MemberRoster类中添加对应的公共属性并标记[JsonPropertyName]特性即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 18:40:27