我正在尝试使用Newtonsoft Json.Net序列化对象.
这个对象是一个匿名类型,充满了很多异类的东西,主要是普通的POCO,还有一些JObjects或JArrays.
问题是,在添加NullValueHandling属性时NullValueHandling.Ignore,每个null属性都会被忽略,但前提是它只是"常规".Net对象的一部分.内部JObject或JArray遗留的每个null属性.
这是一个最小的例子:
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});
Run Code Online (Sandbox Code Playgroud)
是否有一种简单的方法可以忽略这些空值?我错过了一些设置选项吗?或者我必须手动处理它?
dbc*_*dbc 21
a中的"null"值JObject实际上是非nullJValue,JValue.Type等于JTokenType.Null.当这样的值实际出现在JSON中时,它表示JSON值为null.我相信它存在以捕获以下两个JSON对象之间的差异:
"source2": {
"z": null
}
"source2": {
}
Run Code Online (Sandbox Code Playgroud)
在第一种情况下,该属性"z"具有nullJSON值.在第二种情况下,该财产"z"不存在.Linq-to-JSON表示第一种具有null-type的情况,JValue而不是JProperty.Value实际为null.
要防止空令牌进入您JObject的值,请在JObject从某些POCO 创建时使用相应的序列化程序设置:
var jobj = JObject.FromObject(new
{
x = 1,
y = "bla",
z = (int?)null
}, new JsonSerializer { NullValueHandling = NullValueHandling.Ignore } );
Run Code Online (Sandbox Code Playgroud)
(注意,POCO本身不能是a JObject.无类型方法JsonConvert.DeserializeObject(jsonString)或JsonConvert.DeserializeObject<dynamic>(jsonString)默认情况下将返回JObject当根JSON容器jsonString为JSON对象时.)
| 归档时间: |
|
| 查看次数: |
7932 次 |
| 最近记录: |