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

使用System.Text.Json反序列化List<Element>时触发JsonException求助

问题原因

你的JSON根结构是一个包含elements数组的对象,但代码中直接尝试将整个JSON反序列化为List<Element>,两者类型不匹配,导致抛出JsonException。另外,Element类中大部分属性没有指定与JSON键的映射关系,System.Text.Json默认大小写敏感,会导致这些属性反序列化后值为null或默认值。

解决方案

1. 创建匹配JSON根结构的类

新增一个根类来对应JSON的顶层结构:

public class ElementsRoot
{
    [JsonPropertyName("elements")]
    public List<Element>? Elements { get; set; }
}

2. 修正Element类的属性映射

为每个属性添加JsonPropertyName特性,匹配JSON中的小写键:

public class Element
{
    [JsonPropertyName("group")]
    public string? Group { get; set; }
    
    [JsonPropertyName("position")]
    public int Position { get; set; }
    
    [JsonPropertyName("name")]
    public string? Name { get; set; }
    
    [JsonPropertyName("number")]
    public int Number { get; set; }

    [JsonPropertyName("small")]
    public string? Sign { get; set; }
    
    [JsonPropertyName("molar")]
    public double Molar { get; set; }
    
    [JsonPropertyName("electrons")]
    public IList<int>? Electrons { get; set; }

    public override string ToString()
    {
        return $"{Sign} - {Name}";
    }
}

3. 修改反序列化代码

将JSON反序列化为ElementsRoot类型,再取出其中的元素列表:

public List<Element> LoadJson()
{
    using (StreamReader r = new StreamReader("jsondata/elements.json"))
    {
        string json = r.ReadToEnd();
        var rootObject = JsonSerializer.Deserialize<ElementsRoot>(json);
        // 空值处理,避免返回null
        return rootObject?.Elements ?? new List<Element>();
    }
}

可选:开启大小写不敏感匹配

如果你不想逐个添加JsonPropertyName,也可以通过配置开启大小写不敏感的属性匹配:

public List<Element> LoadJson()
{
    var options = new JsonSerializerOptions
    {
        PropertyNameCaseInsensitive = true
    };
    
    using (StreamReader r = new StreamReader("jsondata/elements.json"))
    {
        string json = r.ReadToEnd();
        var rootObject = JsonSerializer.Deserialize<ElementsRoot>(json, options);
        return rootObject?.Elements ?? new List<Element>();
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 07:36:33