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

.NET中使用System.Text.Json合并两个JSON字符串的方法

用System.Text.Json合并两个JSON字符串的实现方案

方法一:手动遍历JsonDocument节点合并(无需实体类)

这种方法无需提前定义数据模型,直接操作JSON节点完成合并,适合快速处理场景:

using System.Text.Json;
using System.IO;

public static string MergeJsonStrings(string firstJson, string secondJson)
{
    using var doc1 = JsonDocument.Parse(firstJson);
    using var doc2 = JsonDocument.Parse(secondJson);
    
    using var stream = new MemoryStream();
    using var writer = new Utf8JsonWriter(stream, new JsonWriterOptions { Indented = true });
    
    writer.WriteStartObject();
    
    // 写入第一个JSON的所有顶层属性
    foreach (var property in doc1.RootElement.EnumerateObject())
    {
        property.WriteTo(writer);
    }
    
    // 写入第二个JSON的所有顶层属性
    foreach (var property in doc2.RootElement.EnumerateObject())
    {
        property.WriteTo(writer);
    }
    
    writer.WriteEndObject();
    writer.Flush();
    
    stream.Position = 0;
    using var reader = new StreamReader(stream);
    return reader.ReadToEnd();
}

调用示例:

string firstJson = "你的第一个JSON字符串内容";
string secondJson = "你的第二个JSON字符串内容";
string mergedJson = MergeJsonStrings(firstJson, secondJson);

方法二:通过实体类反序列化合并(类型安全)

如果需要对合并后的数据进行业务操作,可通过定义对应实体类实现类型安全的合并:

第一步:定义映射实体类

using System.Text.Json.Serialization;
using System.Collections.Generic;

public class MergedRoot
{
    public FirstJson FirstJson { get; set; }
    public SecondJson SecondJson { get; set; }
}

public class FirstJson
{
    public TestData Test1 { get; set; }
    public TestData Test2 { get; set; }
}

public class TestData
{
    [JsonPropertyName("2020")]
    public List<string> Year2020 { get; set; }
    [JsonPropertyName("2021")]
    public List<string> Year2021 { get; set; }
}

public class SecondJson
{
    public List<YearData> Test3 { get; set; }
}

public class YearData
{
    [JsonPropertyName("2020")]
    public List<string> Year2020 { get; set; }
    [JsonPropertyName("2021")]
    public List<string> Year2021 { get; set; }
}

第二步:反序列化并合并

using System.Text.Json;

public static string MergeWithModels(string firstJson, string secondJson)
{
    // 提取第一个JSON中的FirstJson节点
    var firstRoot = JsonSerializer.Deserialize<JsonElement>(firstJson);
    var firstJsonData = firstRoot.GetProperty("FirstJson").Deserialize<FirstJson>();
    
    // 提取第二个JSON中的SecondJson节点
    var secondRoot = JsonSerializer.Deserialize<JsonElement>(secondJson);
    var secondJsonData = secondRoot.GetProperty("SecondJson").Deserialize<SecondJson>();
    
    // 组合成最终根对象
    var mergedRoot = new MergedRoot
    {
        FirstJson = firstJsonData,
        SecondJson = secondJsonData
    };
    
    // 序列化为格式化后的JSON字符串
    return JsonSerializer.Serialize(mergedRoot, new JsonSerializerOptions { WriteIndented = true });
}

方案说明

  • 方法一灵活度高,无需定义实体类,适合临时、简单的JSON合并需求。
  • 方法二具备类型校验能力,便于后续对合并数据进行业务逻辑处理,适合长期维护的项目。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 23:15:28