C# Newtonsoft JSON在合并和/或序列化时删除空属性
考虑以下场景:C# Newtonsoft JSON在合并和/或序列化时删除空属性,c#,json,json.net,C#,Json,Json.net,考虑以下场景: var s1 = "{\"hello\":\"world\", \"test\":\"somevalue\"}"; var s2 = "{\"hello\":\"world\", \"test\":null}"; var j1 = JObject.Parse(s1); var j2 = JObject.Parse(s2); j1.Merge(j2, new JsonMergeSettings { MergeArrayHandling = MergeArrayHandling.
var s1 = "{\"hello\":\"world\", \"test\":\"somevalue\"}";
var s2 = "{\"hello\":\"world\", \"test\":null}";
var j1 = JObject.Parse(s1);
var j2 = JObject.Parse(s2);
j1.Merge(j2, new JsonMergeSettings { MergeArrayHandling = MergeArrayHandling.Union, MergeNullValueHandling = MergeNullValueHandling.Merge });
var jf = JsonConvert.SerializeObject(j1, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore });
jf
的结果是{“hello”:“world”,“test”:null}
如何调用库以使合并结果为:
{“你好”:“世界”}
在这种情况下,我必须递归地遍历结果对象并手动删除空值属性吗?或者有什么魔杖说“序列化时删除这些空值”
我知道
JsonProperty->NullValueHandling
,但这些是我正在处理的动态对象,因此模型是未知的。您可以像这样从JObject中删除null属性:也相关(可能重复):和。@dbc--是的,这就是我正在寻找的。如果我必须递归地这样做,这就回答了这个问题。我希望已经有了某种东西,但如果这是唯一的办法,那就这样吧。我感谢你的研究。我向你保证,在我发布这篇文章之前,我到处寻找答案!我使用了您共享的这个链接中的答案:@Andy-除非在生成JToken
时可以抑制null
值,否则递归修剪它们是当前唯一的方法,因为JsonConvert.SerializeObject()
实际上不会序列化JToken
。Json.NET将JToken
视为已序列化的内容,因此它只是格式化其内容。@dbc——如果您将其作为答案发布,我将接受。再次感谢你的帮助。你的解决方案会让我这边的很多人感到高兴。埃塔:没关系,它被标为傻瓜。