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

如何序列化多层嵌套的复杂模型对象并通过GET Web API传输

多层嵌套模型序列化为QueryString并用于GET请求的实现方案

适配规则说明

目前主流Web框架默认支持的嵌套/集合类QueryString绑定规则如下,你提供的DTO结构完全可以按照该规则完成序列化,后端接收时直接给对应参数加[FromQuery]特性即可自动完成绑定:

  • 集合元素格式:集合属性名[索引].属性名=值
  • 深层嵌套格式:上层属性名.子属性名=值

可行实现方案

  • 方案1:使用成熟的第三方序列化库

.NET生态下已有多个专门处理QueryString序列化的类库,原生支持多层嵌套对象、泛型集合、深层嵌套结构的序列化,不需要手动开发递归逻辑,直接传入DTOClassroom对象即可生成符合绑定规则的QueryString,空值、布尔值、枚举转换等边界场景都已经做了适配,是优先推荐的方案。

  • 方案2:手动实现序列化逻辑

如果不想引入额外依赖,可以自己实现递归序列化逻辑,核心逻辑如下:

  1. 递归遍历对象的所有公开属性
  2. 遇到字符串、数值、布尔等基础类型,直接拼接为键=值的格式
  3. 遇到List、IEnumerable等集合类型,遍历每个元素,为每个元素的键添加[索引]前缀后继续递归处理
  4. 遇到自定义复杂类型,为子属性的键添加当前属性名.前缀后继续递归处理

注意事项

  • GET请求的URL存在长度限制,不同浏览器、服务器的限制通常在2KB~8KB之间,如果你的嵌套集合数据量较大,建议改为POST请求将数据放在请求体中传输,避免URL超长导致请求失败。
  • 如果对接的后端不是ASP.NET Core技术栈,需要提前确认后端的QueryString绑定规则,部分框架会用下划线替代点号、用无索引的重复键来处理集合,需要对应调整序列化的键生成规则。

你提供的DTO结构参考

public class DTOClassroom
{
    public string SpreadsheetTitle { get; set; }
    public List<DTOClassroomMonthlyTest> MonthlyTests { get; set; }
    public List<DTOClassroomSpecialty_Subject> Specialty_Subjects { get; set; }
}

public class DTOClassroomMonthlyTest
{
    public int Term_MonthId { get; set; }
    public int MonthId { get; set; }
    public string MonthCalculationType { get; set; }
}

public class DTOClassroomSpecialty_Subject
{
    public int Specialty_SubjectId { get; set; }
    public bool IsSelected { get; set; }
    public IEnumerable<DTOClassroomSpecialty_SubjectChild> ChildColumns { get; set; }
}

public class DTOClassroomSpecialty_SubjectChild
{
    public int ActivityId { get; set; }
    public int Sort { get; set; }
    public string Name { get; set; }
    public string Scope { get; set; }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 22:57:03