Newtonsoft Json.Net сериализация JObject не игнорирует нули, даже с правильными настройками
Я пытаюсь сериализовать объект с помощью Newtonsoft Json.Net.
этот объект является анонимным типом, заполненным множеством гетерогенных вещей, в основном регулярных POCOs, но и некоторых JObject
или JArray
s.
дело в том, что при добавлении NullValueHandling
свойство NullValueHandling.Ignore
, каждое свойство null игнорируется, но только если оно является частью "обычного" объекта .Net. Каждое свойство null внутри a JObject
или 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});
есть ли простой способ игнорировать эти нулевые значения ? Я пропустил какой-то параметр настройки ? Или мне придется заниматься этим вручную ?
1 ответов
A "null"
значение JObject
на самом деле non-null JValue
С JValue.Type
равна JTokenType.Null
. Он представляет значение JSON null, когда такое значение фактически появляется в JSON. Я считаю, что он существует, чтобы захватить разницу между следующими двумя объектами JSON:
"source2": {
"z": null
}
"source2": {
}
в первом случае собственность "z"
представляет null
значение JSON. Во втором случае свойство "z"
не подарок. Linq-to-JSON представляет первый случай с нулевым типом JValue
вместо JProperty.Value
на самом деле быть null.
чтобы предотвратить попадание нулевых токенов в ваш JObject
значения, используйте соответствующую настройку сериализатора при создании JObject
:
var jobj = JObject.FromObject(new
{
x = 1,
y = "bla",
z = (int?)null
}, new JsonSerializer { NullValueHandling = NullValueHandling.Ignore } );