【发布时间】:2015-03-25 14:32:37
【问题描述】:
我正在尝试使用 Newtonsoft Json.Net 序列化对象。
这个对象是一个匿名类型,里面填充了很多异构的东西,主要是常规的POCO,也有一些JObjects 或JArrays。
问题是当将NullValueHandling 属性添加到NullValueHandling.Ignore 时,每个空属性都会被忽略,但前提是它是“常规”.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});
是否有一种简单的方法也可以忽略这些空值?我错过了一些设置选项吗?还是我必须手动处理?
【问题讨论】:
-
如果你能提供一个简短但完整的程序来演示这个问题,那真的很有帮助。
-
数组中跳过的
null条目会改变索引;在这种情况下,您需要手动处理。 -
此代码无法编译,因为 1) 没有 Foo 类型(不,这不是挑剔,因为问题可能出在该类型的定义中),以及 2) 你可以t 将 null 文字分配给匿名类型属性。
-
@erikkallen 好的,第二个,我手动输入的,这是来自现实生活中的真实对象,但我不能直接对它们采取行动。已更正。对于“没有 Foo 类型”,你是对的,这种类型称为 Column,但这无关紧要,因为这些对象被完美地序列化了。