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

如何不使用循环通过JsonConvert等库将JSON转换为C# Student类对象列表

可以实现,无需手动编写循环,有两种常用实现方案,均基于Newtonsoft.Json(JsonConvert所属库)完成:

方案1:LINQ极简实现(无需自定义转换器)

该方案适合单次转换场景,代码量最少。
首先定义承接原始JSON结构的中间对象:

public class StudentRawResponse
{
    public List<string> Header { get; set; }
    public List<List<string>> Rows { get; set; }
}

转换代码如下,全程无手动for/foreach循环:

// 反序列化原始JSON
var rawData = JsonConvert.DeserializeObject<StudentRawResponse>(yourJsonString);

// 匹配header索引,避免硬编码下标带来的顺序兼容问题
var headerIndex = rawData.Header
    .Select((name, idx) => new { name = name.ToLower(), idx })
    .ToDictionary(x => x.name, x => x.idx);

// 直接用LINQ转换得到Student列表
List<Student> studentList = rawData.Rows
    .Select(row => new Student
    {
        id = row[headerIndex["id"]],
        name = row[headerIndex["name"]],
        address = row[headerIndex["address"]]
    })
    .ToList();

方案2:自定义JsonConverter(适合多次复用)

如果需要频繁转换该结构的JSON,可以自定义转换器,后续转换只需一行代码:
首先实现自定义转换器:

using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

public class StudentListConverter : JsonConverter<List<Student>>
{
    public override void WriteJson(JsonWriter writer, List<Student> value, JsonSerializer serializer)
    {
        // 序列化需求可自行实现,这里仅实现反序列化逻辑
        throw new NotImplementedException();
    }

    public override List<Student> ReadJson(JsonReader reader, Type objectType, List<Student> existingValue, bool hasExistingValue, JsonSerializer serializer)
    {
        var jObj = JObject.Load(reader);
        var headers = jObj["header"].ToObject<List<string>>()
            .Select((name, idx) => new { name = name.ToLower(), idx })
            .ToDictionary(x => x.name, x => x.idx);
        var rows = jObj["rows"].ToObject<List<List<string>>>();
        
        return rows.Select(row => new Student
        {
            id = row[headers["id"]],
            name = row[headers["name"]],
            address = row[headers["address"]]
        }).ToList();
    }
}

后续转换直接调用即可:

List<Student> studentList = JsonConvert.DeserializeObject<List<Student>>(yourJsonString, new StudentListConverter());

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 04:57:01