首页 > 解决方案 > Newtonsoft.Json Union 和 Replace 同时

问题描述

我正在尝试合并两个 JSON 文件,我需要添加不存在的对象/子对象(嵌套四或五层深),但如果它们已经存在则覆盖它们。

到目前为止,我得到了:

var target = File.ReadAllText(filePath);
JObject sourceJObject = JsonConvert.DeserializeObject<JObject>(json);
JObject targetJObject = JsonConvert.DeserializeObject<JObject>(target);

if (!JToken.DeepEquals(sourceJObject, targetJObject))
{
    targetJObject.Merge(sourceJObject, new JsonMergeSettings
    { 
        MergeArrayHandling = MergeArrayHandling.Union
    });

}

File.WriteAllText(filePath, JsonConvert.SerializeObject(targetJObject, Formatting.Indented)); 

问题是现在我得到了所有缺少的东西,但是现有的项目被跳过了。如果我使用MergeArrayHandling.Replace它们,它们会被替换,但不会被添加。问题:如何同时使用两者?

标签: c#jsonasp.net-corejson.net

解决方案


那你不能两者都做吗?:

 targetJObject.Merge(sourceJObject, new JsonMergeSettings
    { 
        MergeArrayHandling = MergeArrayHandling.Union
    });
 targetJObject.Merge(sourceJObject, new JsonMergeSettings
    { 
        MergeArrayHandling = MergeArrayHandling.Replace
    });

推荐阅读