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

C#中JSON反序列化报错:无法将JSON对象转为List<Track>求助

解决方案

1. 错误核心原因

报错明确指出:JSON返回的是单个对象({...}),但你试图反序列化成数组类型List<Track>,这是顶层类型不匹配导致的,和Track类内部的events列表无关。

2. 步骤1:修正顶层模型类

创建根模型类匹配返回的JSON对象结构(需根据实际JSON的顶层字段调整,示例假设JSON根对象包含Tracks数组字段):

public class TrackRootResponse
{
    // 字段名需和JSON顶层数组字段完全对应,比如JSON是{"data": [...]}就改成Data
    public List<Track> Tracks { get; set; }
}

3. 步骤2:修正模型类名称不匹配问题

你的模型类存在名称与JSON字段不对应的问题,需调整:

  • 将DocumentReferencesMearsk改名为DocumentReferences(对应JSON里的documentReferences字段)
  • 将TransportCallMaersk改名为TransportCall(对应JSON里的transportCall字段)
  • 若不想修改类名,可通过JsonProperty特性指定映射:
    public class DocumentReferencesMearsk
    {
        [JsonProperty("documentReferenceType")]
        public string DocumentReferenceType { get; set; }
        [JsonProperty("documentReferenceValue")]
        public string DocumentReferenceValue { get; set; }
    }
    

4. 步骤3:修改反序列化代码

将反序列化目标改为根模型类,同时修复异步代码的不当用法:

public async Task<List<Track>> GetTracking()
{
    ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
    using (var httpClient = new HttpClient())
    {
        using (var request = new HttpRequestMessage(HttpMethod.Get, "urlxxxxxxxx..."))
        {
            request.Headers.TryAddWithoutValidation("accept", "application/json");
            var response = await httpClient.SendAsync(request);
            response.EnsureSuccessStatusCode(); // 建议添加,确保请求成功

            var jsonStr = await response.Content.ReadAsStringAsync(); // 用await替代GetResult()避免死锁
            var rootResponse = JsonConvert.DeserializeObject<TrackRootResponse>(jsonStr);
            Tracks = rootResponse.Tracks;
        }
    }
    return Tracks;
}

5. 额外验证建议

  • 先打印jsonStr确认顶层结构:如果JSON顶层是单个Track对象(非数组),则反序列化目标需改为Track而非List<Track>;
  • 可使用本地JSON转C#模型工具(如VS的“粘贴JSON为类”功能),直接生成与JSON完全匹配的模型类,避免手动编写的错误。

内容的提问来源于stack exchange,提问作者Chim Di Tru

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 13:06:28