Estoy usando Json.NET para serializar una clase a JSON.
Tengo la clase como esta:
class Test1
{
[JsonProperty("id")]
public string ID { get; set; }
[JsonProperty("label")]
public string Label { get; set; }
[JsonProperty("url")]
public string URL { get; set; }
[JsonProperty("item")]
public List<Test2> Test2List { get; set; }
}
Quiero agregar un JsonIgnore()
atributo a la Test2List
propiedad solo cuando Test2List
sea null
. Si no es nulo, entonces quiero incluirlo en mi json.
JsonSerializerSettings
noJsonSerializer
, ya que mostró un error para el últimoUna solución alternativa que utiliza el
JsonProperty
atributo:Como se ve en este documento en línea .
fuente
[JsonObject]
, pero tenga en cuenta que el nombre del atributo es diferente. [respuesta editada]Similar a la respuesta de @ sirthomas, JSON.NET también respeta la
EmitDefaultValue
propiedad enDataMemberAttribute
:Esto puede ser deseable si ya está utilizando
[DataContract]
y[DataMember]
en su tipo de modelo y no desea agregar atributos específicos de JSON.NET.fuente
Puedes escribir:
[JsonProperty("property_name",DefaultValueHandling = DefaultValueHandling.Ignore)]
También se ocupa de no serializar propiedades con valores predeterminados (no solo nulos). Puede ser útil para enumeraciones, por ejemplo.
fuente
Puede hacer esto para ignorar todos los valores nulos en un objeto que está serializando, y las propiedades nulas no aparecerán en el JSON
fuente
Como se puede ver en este enlace en su sitio (http://james.newtonking.com/archive/2009/10/23/efficient-json-with-json-net-reducing-serialized-json-size.aspx) I admite el uso de [Predeterminado ()] para especificar valores predeterminados
Tomado del enlace
fuente
Una adaptación a la respuesta de @ Mrchief / @ amit, pero para las personas que usan VB
Consulte: "Inicializadores de objetos: tipos con nombre y anónimos (Visual Basic)"
https://msdn.microsoft.com/en-us/library/bb385125.aspx
fuente
En .Net Core esto es mucho más fácil ahora. En su startup.cs simplemente agregue las opciones de json y puede configurar las configuraciones allí.
fuente
Con Json.NET
El resultado será:
fuente
Con
System.Text.Json
y .NET Core 3.0 esto funcionó para mí:fuente
Para exponer un poco la respuesta muy útil de GlennG (traducir la sintaxis de C # a VB.Net no siempre es "obvio") también puede decorar propiedades de clase individuales para administrar cómo se manejan los valores nulos. Si hace esto, no use el JsonSerializerSettings global de la sugerencia de GlennG, de lo contrario, anulará las decoraciones individuales. Esto es útil si desea que aparezca un elemento nulo en el JSON para que el consumidor no tenga que hacer ningún manejo especial. Si, por ejemplo, el consumidor necesita saber que una variedad de artículos opcionales está normalmente disponible, pero actualmente está vacía ... La decoración en la declaración de propiedad se ve así:
Para aquellas propiedades que no desea que aparezcan en absoluto en el cambio JSON : = NullValueHandling.Incluye en : = NullValueHandling.Ignore . Por cierto, descubrí que puedes decorar una propiedad para la serialización XML y JSON muy bien (solo ponlas una al lado de la otra). Esto me da la opción de llamar al serializador XML en dotnet o al serializador NewtonSoft a voluntad, ambos trabajan lado a lado y mis clientes tienen la opción de trabajar con XML o JSON. ¡Esto es resbaladizo como un moco en un picaporte porque tengo clientes que requieren ambos!
fuente
Aquí hay una opción que es similar, pero ofrece otra opción:
Entonces, lo uso así:
La diferencia aquí es que:
JsonSerializerSettings
cada lugar donde se usa.fuente
fuente