我有这段代码,用于合并 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"
]
}
}
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": {}
}
演示小提琴在这里。