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

JSON反序列化为C#对象时无法获取Itineraries列表问题求助

问题原因

  • 第一,JSON结构与反序列化目标类结构不匹配:当前JSON最外层是包含data字段的对象,直接反序列化为Data类时,外层对象不存在与itineraries匹配的属性,最终得到的Data对象中的列表会保持初始化的空值。
  • 第二,属性名大小写不匹配:JSON中data节点下的数组字段为大写开头的Itineraries,默认System.Text.Json序列化器区分属性名大小写,无法自动映射到C#类中小写开头的itineraries属性。

修复方案

步骤1:补充根节点类,适配JSON外层结构

新增根类对应JSON最外层对象:

public class RootObject
{
    public Data data { get; set; }
}

步骤2:修复属性映射问题,以下两种方案二选一即可

方案A:通过特性指定属性映射(推荐,不影响C#命名规范)

给Data类的列表属性添加JsonPropertyName特性,显式指定对应JSON的字段名:

using System.Text.Json.Serialization;

public class Data
{
    [JsonPropertyName("Itineraries")]
    // 类名建议调整为符合C# Pascal规范的Itinerary,非强制
    public List<Itinerary> Itineraries { get; set; } = new List<Itinerary>();
}

public class Itinerary
{
    public bool isDomestic { get; set; }
    public string departureAirport { get; set; }
    public string arrivalAirport { get; set; }
}

方案B:配置序列化器不区分属性大小写

如果不想修改类定义,可以在反序列化时开启大小写不敏感配置:

var jsonOptions = new JsonSerializerOptions
{
    PropertyNameCaseInsensitive = true
};

步骤3:修正反序列化和遍历代码

调整反序列化目标为根类,再从根类中读取data节点的列表:

// 若使用方案B,需要把jsonOptions传入Deserialize方法
RootObject root = JsonSerializer.Deserialize<RootObject>(json);

foreach (var item in root.data.Itineraries)
{
    Console.WriteLine($"departureAirport:{item.departureAirport}");
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 03:15:02