使用 JSON.net 合并时不会覆盖空对象

问题描述 投票:0回答:1

我有这段代码,用于合并 2 个 json(完整和部分)。有一个空物体。

string jsonOrigen = @"
 {
     'business': {
         'tradingaccount': [
             '60325f59-6bef-418a-69a1-08db40bce9af',
             '054ae632-9b82-4644-6e8c-08db45721efd'
         ],
         'campaign': [
             'cf308053-3118-4e92-7bb7-08db73cba4df',
             '5ad21da9-337a-4afc-7bb8-08db73cba4df'
         ],
         'service': [
             'ab14b586-38d8-41a2-01d4-08db86a59448',
             'adac9392-d602-4874-01d5-08db86a59448'
         ]
     }
 }";

 string jsonParcial = @"{ 'business': {} }";

 JObject tokenOrigen = JObject.Parse(jsonOrigen);
 JObject tokenParcial = JObject.Parse(jsonParcial);

 tokenOrigen.Merge(tokenParcial, new JsonMergeSettings
 {
     MergeNullValueHandling = MergeNullValueHandling.Merge
 });

 string res = tokenOrigen.ToString(Formatting.Indented);

输出应该是

    "business": {}

但是是

 {
  "business": {
    "tradingaccount": [
      "60325f59-6bef-418a-69a1-08db40bce9af",
      "054ae632-9b82-4644-6e8c-08db45721efd"
    ],
    "campaign": [
      "cf308053-3118-4e92-7bb7-08db73cba4df",
      "5ad21da9-337a-4afc-7bb8-08db73cba4df"
    ],
    "service": [
      "ab14b586-38d8-41a2-01d4-08db86a59448",
      "adac9392-d602-4874-01d5-08db86a59448"
    ]
  }
}
c# merge json.net
1个回答
0
投票

JContainer.Merge()
旨在进行深度合并,其中具有相同名称的属性值被递归合并。由于空
"business"
对象没有属性,因此它没有任何可合并的内容,并且原始
"business"
对象保持不变。

如果您只想进行浅层合并,其中

tokenParcial
的属性值替换
tokenOrigen
的属性值,您可以使用 LINQ 轻松完成此操作:

var query = tokenParcial.Properties().Concat(tokenOrigen.Properties())
    .GroupBy(p => p.Name)
    .Select(p => p.First()); // First() takes the properties of tokenParcial before those of tokenOrigen
var merged = new JObject(query);

string res = merged.ToString(Formatting.Indented);

根据要求,这会导致:

{
  "business": {}
}

演示小提琴在这里

© www.soinside.com 2019 - 2024. All rights reserved.