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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 10:06:05