c# - Ignorando campos nulos en Json.net
serialization (2)
Tengo algunos datos que tengo que serializar a JSON. Estoy usando JSON.NET. Mi estructura de código es similar a esto:
public struct structA
{
public string Field1;
public structB Field2;
public structB Field3;
}
public struct structB
{
public string Subfield1;
public string Subfield2;
}
El problema es que mi salida JSON solo necesita tener el Field2
O el Field2
O el Field3
- depende de qué campo se use (es decir, no sea nulo). Por defecto, mi JSON se ve así:
{
"Field1": null,
"Field2": {"Subfield1": "test1", "Subfield2": "test2"},
"Field3": {"Subfield1": null, "Subfield2": null},
}
Sé que puedo usar NullValueHandling.Ignore
, pero eso me da JSON que se ve así:
{
"Field2": {"Subfield1": "test1", "Subfield2": "test2"},
"Field3": {}
}
Y lo que necesito es esto:
{
"Field2": {"Subfield1": "test1", "Subfield2": "test2"},
}
¿Hay una manera simple de lograr esto?
Sí, necesita usar JsonSerializerSettings.NullValueHandling = NullValueHandling.Ignore
.
Pero debido a que las estructuras son tipos de valores , debe marcar Field2, Field3 y anulables para obtener el resultado esperado:
public struct structA
{
public string Field1;
public structB? Field2;
public structB? Field3;
}
O solo usa clases en lugar de estructuras.
Documentación: NullValueHandling Enumeration
También puede aplicar el atributo JsonProperty a las propiedades relevantes y establecer el manejo del valor nulo de esa manera. Consulte la propiedad de Reference
en el siguiente ejemplo:
Nota: JsonSerializerSettings
anulará los atributos.
public class Person
{
public int Id { get; set; }
[JsonProperty( NullValueHandling = NullValueHandling.Ignore )]
public int? Reference { get; set; }
public string Name { get; set; }
}
Hth.