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

C#中JSON反序列化时Address字段子属性无法获取的求助

解决C# JSON反序列化无法获取Address子属性的问题

问题根源

  1. 属性名不匹配:JSON中地址字段名为Address,但实体类Event中对应的属性是address1,序列化器无法识别映射关系,导致Address1的子属性始终为null。
  2. 反序列化类型错误:提供的JSON是单个Event对象,你却尝试反序列化为IEnumerable<Event>集合,这会直接返回null或引发序列化异常。

修正步骤

1. 对齐实体类与JSON字段名

方案一:直接修改属性名(推荐)

将Event类中的地址属性名改为和JSON一致的Address:

public class Event
{
    public string Name { get; set; }
    public DateTime Start { get; set; }
    public DateTime End { get; set; }
    public string AdditionalInformation { get; set; }
    // 修改属性名匹配JSON的"Address"字段
    public Address1 Address { get; set; }
}

public class Address1
{
    public string Information { get; set; }
    public string City { get; set; }
    public string CountryIso2 { get; set; }
}

方案二:使用特性指定映射(适合无法修改属性名的场景)

通过JsonPropertyName特性强制指定JSON字段名:

using System.Text.Json.Serialization;

public class Event
{
    public string Name { get; set; }
    public DateTime Start { get; set; }
    public DateTime End { get; set; }
    public string AdditionalInformation { get; set; }
    // 绑定JSON中的"Address"字段到当前属性
    [JsonPropertyName("Address")]
    public Address1 address1 { get; set; }
}

public class Address1
{
    public string Information { get; set; }
    public string City { get; set; }
    public string CountryIso2 { get; set; }
}

2. 修正反序列化目标类型

由于JSON是单个对象,将反序列化的目标类型改为Event而非集合:

public class DataService
{
    public async Task<Event?> GetEventsAsync()
    {
        return JsonSerializer.Deserialize<Event>(await File.ReadAllTextAsync("Data/Events.json"));
    }
}

如果你的JSON文件实际是多个Event组成的数组(格式为[{"Name":"..."}, {...}]),可以保留IEnumerable<Event>类型。

可选:处理大小写敏感性

如果后续遇到仅大小写差异的字段映射问题,可以开启忽略大小写配置:

var options = new JsonSerializerOptions
{
    PropertyNameCaseInsensitive = true
};
return JsonSerializer.Deserialize<Event>(await File.ReadAllTextAsync("Data/Events.json"), options);

内容的提问来源于stack exchange,提问作者Gamer X.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 20:15:50