Deep clone and recursive merge of JsonObject trees
C#
using System.Text.Json.Nodes;
static JsonNode Clone(JsonNode node) => JsonNode.Parse(node.ToJsonString())!;
static void Merge(JsonObject target, JsonObject source)
{
foreach (var (key, value) in source)
{
if (value is JsonObject child && target[key] is JsonObject existing)
Merge(existing, child);
else
target[key] = value is null ? null : JsonNode.Parse(value.ToJsonString());
}
}