c# .net json serialization json.net

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.