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

System.Text.Json反序列化JSON为Customer对象列表报错求助

问题根因

你的database.json外层是包含customers字段的对象结构,不是直接的客户数组,你直接将整个JSON反序列化为List<Customer>,类型结构不匹配,所以抛出转换失败的异常。你之前尝试先把JSON反序列化为字符串的写法完全错误,JSON根节点是对象不是字符串,自然会报字符解析错误。

解决方案

方案1:定义外层根包装类(推荐)

新增根节点映射类即可完全复用你现有的反序列化工具方法:

public class CustomerRoot
{
    [JsonProperty("customers")]
    [JsonPropertyName("customers")]
    public List<Customer> Customers { get; set; }
}

修改反序列化业务代码:

private List<Customer> GetCustomersFromFile()
{
    string jsonString = File.ReadAllText(@"database.json", Encoding.UTF8);
    var root = GetJsonGenericType<CustomerRoot>(jsonString);
    return root.Customers;
}

原有Customer类和GetJsonGenericType方法不需要做任何修改。

方案2:直接提取数组节点反序列化(无需新增类)

如果你不想额外新增根类,可以先解析JSON结构提取出customers数组节点,再做反序列化:

基于System.Text.Json实现

private List<Customer> GetCustomersFromFile()
{
    string jsonString = File.ReadAllText(@"database.json", Encoding.UTF8);
    using JsonDocument doc = JsonDocument.Parse(jsonString);
    JsonElement customersElement = doc.RootElement.GetProperty("customers");
    return JsonSerializer.Deserialize<List<Customer>>(customersElement.GetRawText());
}

基于Newtonsoft.Json实现

private List<Customer> GetCustomersFromFile()
{
    string jsonString = File.ReadAllText(@"database.json", Encoding.UTF8);
    JObject root = JObject.Parse(jsonString);
    return root["customers"].ToObject<List<Customer>>();
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 05:30:05