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

