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

JSON序列化时能否展开嵌套属性?求对应注解方案

我定义了以下类型:

class A{ 
  public int A{get;set;}
  public int B{get;set;}
}

class B{
 public A A {get; set;}
 public int C {get;set;}
}

请问是否存在可用于public A A{get;set;}的注解,能将A对象的内容展开/解包,使API端点返回的JSON输出为:

{
"a" : valuea,
"b" : valueb,
"c" : valuec
}

而非:

{
 "a": {"a": valuea, "b": valueb},
 "c": valuec
}
解决方案

针对这个需求,主流JSON序列化库都有对应的特性可以实现对象属性展开:

1. Newtonsoft.Json(Json.NET)

直接使用[JsonUnwrapped]特性即可实现属性展开,修改B类定义如下:

using Newtonsoft.Json;

class B{
 [JsonUnwrapped]
 public A A {get; set;}
 public int C {get;set;}
}

该特性会将A对象的所有属性直接平铺到B的JSON层级中,不会生成嵌套结构。

2. System.Text.Json(.NET Core/.NET 5+ 默认序列化库)

在.NET 7及以上版本中,原生支持[JsonUnwrapped]特性,用法和Newtonsoft.Json一致:

using System.Text.Json.Serialization;

class B{
 [JsonUnwrapped]
 public A A {get; set;}
 public int C {get;set;}
}

如果是.NET 7以下版本,没有原生的展开特性,需要通过自定义转换器实现类似效果,但升级到.NET 7+会更简便。

注意:如果A类的属性名和B类的属性名存在冲突,序列化时会抛出异常,需要提前处理命名冲突问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 18:32:34