使用Json.NET如何合并两个C#对象并序列化输出统一JSON结构?
C# 合并多对象属性序列化至同一JSON的实现方案
你当前使用的[JsonProperty]是Newtonsoft.Json(Json.NET)库的特性,以下基于该库给出3种符合开发规范的实现方案,可根据实际场景选择:
方案1:JObject合并(最通用灵活,推荐临时场景使用)
无需新增类、无需硬编码属性名,自动复用原有类上的[JsonProperty]配置,不会因为后续修改A、B类的属性映射规则出错:
using Newtonsoft.Json; using Newtonsoft.Json.Linq; // 分别将两个实例转为JObject JObject aJObj = JObject.FromObject(obj1); JObject bJObj = JObject.FromObject(obj2); // 合并两个JObject,无重复键时可直接合并,重复键默认后者覆盖前者 aJObj.Merge(bJObj, new JsonMergeSettings { MergeArrayHandling = MergeArrayHandling.Union }); // 格式化输出最终JSON string resultJson = aJObj.ToString(Formatting.Indented);
方案2:匿名类型封装(性能最优,适合固定轻量场景)
如果两个类的属性数量少且不会频繁变更,直接构造匿名对象序列化,性能更高:
using Newtonsoft.Json; var mergedObj = new { obj1.X, obj1.Y, obj2.S }; string resultJson = JsonConvert.SerializeObject(mergedObj, Formatting.Indented);
注意:如果使用该方案,要确保匿名类型的属性名和
[JsonProperty]配置的映射名一致,或者直接手动指定属性名对应JSON键。
方案3:定义合并DTO类(可维护性最高,适合复用场景)
如果项目中多处需要用到A、B属性合并的序列化结构,单独定义DTO类符合类型安全要求,可维护性更高:
using Newtonsoft.Json; public class MergedAbDto { [JsonProperty("x_thing")] public int X { get; set; } [JsonProperty("y_thing")] public bool Y { get; set; } [JsonProperty("string_thing")] public string S { get; set; } public MergedAbDto(A a, B b) { X = a.X; Y = a.Y; S = b.S; } } // 调用示例 var mergedDto = new MergedAbDto(obj1, obj2); string resultJson = JsonConvert.SerializeObject(mergedDto, Formatting.Indented);
内容的提问来源于stack exchange,提问作者Archimaredes
相关产品推荐
相关产品推荐

