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
相关产品推荐
相关产品推荐

