c# - 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
它们,它们会被替换,但不会被添加。问题:如何同时使用两者?
解决方案
那你不能两者都做吗?:
targetJObject.Merge(sourceJObject, new JsonMergeSettings
{
MergeArrayHandling = MergeArrayHandling.Union
});
targetJObject.Merge(sourceJObject, new JsonMergeSettings
{
MergeArrayHandling = MergeArrayHandling.Replace
});
推荐阅读
- javascript - 为有孩子的表格中的文本添加 css
- sql - Postgres - How do I check for the date a specific field in a row has been last modified?
- python - 如何在使用python中的函数检查文件是否存在时继续循环
- ios - UIScrollView 中的 UILayoutPriority 不会影响任何内容
- python - 当等于特定值时移动列中的行
- cmd - 无法在 Windows 10 中使用 cmd 运行命令
- android - 为什么新的 google places api 不与 build.gradle 同步?
- javascript - 怎么做
默认值为“false” - amazon-web-services - 解析在 AWS Athena/AWS Glue 目录中的一列中具有换行符的 csv 文件
- android - Google Place Autocomplete 无法解析兼容库中的 Place.Field 字段