Estou usando o Json.NET para serializar uma classe para JSON.
Eu tenho a classe assim:
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; }
}
Eu quero adicionar um JsonIgnore()
atributo à Test2List
propriedade somente quando Test2List
estiver null
. Se não for nulo, quero incluí-lo no meu json.
JsonSerializerSettings
nãoJsonSerializer
como ele mostrou um erro para o últimoUma solução alternativa usando o
JsonProperty
atributo:Como visto neste documento online .
fonte
[JsonObject]
, mas observe que o nome do atributo é diferente. [resposta editada]Semelhante à resposta de @ sirthomas, o JSON.NET também respeita a
EmitDefaultValue
propriedade emDataMemberAttribute
:Isso pode ser desejável se você já estiver usando
[DataContract]
e[DataMember]
no seu tipo de modelo e não quiser adicionar atributos específicos ao JSON.NET.fonte
Você pode escrever:
[JsonProperty("property_name",DefaultValueHandling = DefaultValueHandling.Ignore)]
Ele também cuida de não serializar propriedades com valores padrão (não apenas nulos). Pode ser útil para enumerações, por exemplo.
fonte
Você pode fazer isso para ignorar todos os nulos em um objeto que você está serializando, e quaisquer propriedades nulas não aparecerão no JSON
fonte
Como pode ser visto neste link em seu site (http://james.newtonking.com/archive/2009/10/23/efficient-json-with-json-net-reducing-serialized-json-size.aspx) I suporte usando [Padrão ()] para especificar valores padrão
Retirado do link
fonte
Uma adaptação à resposta de @ Mrchief / @ amit, mas para pessoas que usam VB
Consulte: "Inicializadores de objeto: tipos nomeados e anônimos (Visual Basic)"
https://msdn.microsoft.com/en-us/library/bb385125.aspx
fonte
No .Net Core, isso é muito mais fácil agora. No seu startup.cs, adicione as opções json e você poderá definir as configurações lá.
fonte
Com o Json.NET
O resultado será:
fonte
Com
System.Text.Json
e .NET Core 3.0, isso funcionou para mim:fonte
Para explicar um pouco a resposta muito útil da GlennG (traduzir a sintaxe de C # para VB.Net nem sempre é "óbvia"), você também pode decorar propriedades de classes individuais para gerenciar como os valores nulos são tratados. Se você fizer isso, não use o JsonSerializerSettings global da sugestão da GlennG; caso contrário, ele substituirá as decorações individuais. Isso é útil se você deseja que um item nulo apareça no JSON, para que o consumidor não precise fazer nenhum tratamento especial. Se, por exemplo, o consumidor precisar saber que uma matriz de itens opcionais está normalmente disponível, mas está vazia no momento ... A decoração na declaração de propriedade é semelhante a esta:
Para aquelas propriedades que você não deseja que apareçam na alteração JSON : = NullValueHandling.Include a : = NullValueHandling.Ignore . A propósito - eu descobri que você pode decorar uma propriedade para serialização XML e JSON muito bem (apenas coloque-as uma ao lado da outra). Isso me dá a opção de chamar o serializador XML no dotnet ou o NewtonSoft à vontade - ambos trabalham lado a lado e meus clientes têm a opção de trabalhar com XML ou JSON. Isso é liso como ranho em uma maçaneta, pois tenho clientes que exigem os dois!
fonte
Aqui está uma opção semelhante, mas oferece outra opção:
Então, eu uso assim:
A diferença aqui é que:
JsonSerializerSettings
cada local que é usado.fonte
fonte