Newtonsoft Json.Net序列化JObject不会忽略空值,即使使用正确的设置也是如此
我正在尝试使用Newtonsoft Json.Net序列化对象。
这个对象是一个匿名类型,填充了很多异类的东西,主要是普通的POCO,还有一些JObject
或JArray
。
问题是,当将NullValueHandling
属性添加到NullValueHandling.Ignore
,每个null属性都会被忽略,但NullValueHandling.Ignore
是它只是“常规”.Net对象的一部分。 JObject
或JArray
每个null属性JArray
保留。
这是一个最小的例子:
var jobj = JObject.FromObject(new Anything{ x = 1, y = "bla", z = null }); var poco = new Foo { foo1 = "bar", foo2 = null }; var serialized = JsonConvert.SerializeObject(new { source1 = poco, source2 = jobj }, Newtonsoft.Json.Formatting.None, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore});
是否有一种简单的方法可以忽略这些空值? 我错过了一些设置选项吗? 或者我必须手动处理它?
JObject
"null"
值实际上是一个非null的JValue
,其JValue.Type
等于JTokenType.Null
。 当这样的值实际出现在JSON中时,它表示JSON值为null。 我相信它可以捕获以下两个JSON对象之间的区别:
"source2": { "z": null } "source2": { }
在第一种情况下,属性"z"
以null
JSON值存在。 在第二种情况下,属性"z"
不存在。 Linq-to-JSON表示第一个具有null类型JValue
情况,而不是让JProperty.Value
实际为null 。
要防止空标记JObject
您的JObject
的值,请在创建JObject
时使用相应的序列化程序设置:
var jobj = JObject.FromObject(new { x = 1, y = "bla", z = (int?)null }, new JsonSerializer { NullValueHandling = NullValueHandling.Ignore } );