Ignorando campos nulos en Json.net

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.