C# -
Newtonsoft.Json x System.Text.Json
|
Hoje
vamos comparar os principais métodos usados para serializar e/ou
deserializar objetos JSON motrando a equivalência entre as duas bibliotecas. |
A
serialização e desserialização de objetos JSON em aplicações Web é uma tarefa
comum e pode impactar o desempenho da sua aplicação dependendo do cenário. Para
realizar essas tarefas geralmente são usadas as bibliotecas como Newtonsoft.Json
e mais recentemente a biblioteca System.Text.Json.
A biblioteca
Newtonsoft.Json é uma biblioteca de serialização e desserialização de JSON para
a plataforma .NET sendo uma das bibliotecas mais populares e amplamente usadas
para trabalhar com JSON em projetos .NET.
Já a
biblioteca
System.Text.Json é nativa da plataforma .NET e foi introduzida
na versão 3.0 do .NET Core e se tornou a biblioteca de
serialização e desserialização de JSON padrão a partir do .NET
5.0.
A biblioteca
Newtonsoft.Json fornece recursos avançados de serialização e desserialização de
objetos JSON, incluindo suporte para tipos genéricos, personalização de
serialização, ignorar valores nulos, renomear propriedades, lidar com
referências circulares, configurar culturas, trabalhar com datas, entre outros
recursos.
Da mesma forma a biblioteca System.Text.Json oferece recursos
avançados de serialização e desserialização de objetos JSON,
incluindo suporte para tipos genéricos, personalização de
serialização, ignorar valores nulos, renomear propriedades,
lidar com referências circulares, configurar culturas, trabalhar
com datas, entre outros recursos.
Ao contrário de
outras bibliotecas de terceiros, como o Newtonsoft.Json, o System.Text.Json é
uma biblioteca nativa e de código aberto, o que significa que está disponível em
todas as plataformas suportadas pelo .NET, incluindo Windows, Linux e macOS.
O System.Text.Json
também é mais rápido em muitos cenários em comparação com outras bibliotecas de
serialização e desserialização de JSON, devido à sua arquitetura otimizada para
desempenho e baixo uso de memória.
Desta forma tanto
o pacote Newtonsoft.Json quanto o
System.Text.Json são bibliotecas para serialização
e desserialização de objetos JSON em .NET, mas existem algumas diferenças entre
elas:
-
Desempenho: O System.Text.Json é
geralmente mais rápido do que o Newtonsoft.Json, especialmente quando se
trata de desserialização de grandes volumes de dados.
-
Suporte ao .NET Core: O System.Text.Json
é uma biblioteca padrão do .NET Core desde a versão 3.0, enquanto o
Newtonsoft.Json é uma biblioteca de terceiros que precisa ser adicionada ao
projeto manualmente.
-
Configuração: O Newtonsoft.Json é
geralmente considerado mais flexível e fácil de configurar do que o
System.Text.Json. Isso ocorre porque o Newtonsoft.Json fornece muitas opções
de configuração e personalização.
-
Recursos avançados: O Newtonsoft.Json
tem mais recursos avançados do que o System.Text.Json, como serialização
personalizada, desserialização de tipos anônimos e suporte a serialização
circular. No entanto, esses recursos podem não ser necessários para todas as
aplicações.
-
Tamanho do pacote: O System.Text.Json é
uma biblioteca padrão do .NET Core e está incluída no pacote básico do .NET,
o que significa que não é necessário adicionar uma dependência adicional ao
projeto. O Newtonsoft.Json, por outro lado, é uma biblioteca de terceiros e
precisa ser adicionado ao projeto manualmente, o que aumenta o tamanho do
pacote.
A seguir temos uma
equivalência entre os principais comandos usados das duas bibliotecas:
-
Serialização:
-
Newtonsoft.Json: JsonConvert.SerializeObject(obj)
-
System.Text.Json:
JsonSerializer.Serialize(obj)
-
Desserialização:
-
Newtonsoft.Json: JsonConvert.DeserializeObject<T>(json)
-
System.Text.Json:
JsonSerializer.Deserialize<T>(json)
-
Ignorar propriedades nulas:
-
Newtonsoft.Json: JsonSerializerSettings.NullValueHandling =
NullValueHandling.Ignore
-
System.Text.Json:
JsonSerializerOptions.IgnoreNullValues = true
-
Renomear propriedades:
-
Newtonsoft.Json: [JsonProperty("newName")]
-
System.Text.Json:
[JsonPropertyName("newName")]
-
Converter tipos personalizados:
-
Newtonsoft.Json: JsonConverter
-
System.Text.Json: JsonConverter
-
Configuração de propriedades de
serialização:
-
Newtonsoft.Json: [JsonProperty(Order = 1)]
-
System.Text.Json:
[JsonPropertyName("newName"), JsonIgnore(Condition =
JsonIgnoreCondition.WhenWritingNull)]
-
Anotando classes e propriedades:
-
Newtonsoft.Json: [JsonObject], [JsonArray], [JsonIgnore], [JsonProperty]
-
System.Text.Json: [JsonSerializable],
[JsonArray], [JsonIgnore], [JsonPropertyName]
-
Lidando com
referências circulares:
-
Newtonsoft.Json: JsonSerializerSettings.ReferenceLoopHandling =
ReferenceLoopHandling.Ignore ou ReferenceLoopHandling.Serialize
-
System.Text.Json:
JsonSerializerOptions.ReferenceHandler = ReferenceHandler.Preserve ou
ReferenceHandler.IgnoreCycles
-
Lidando com valores
enumerados:
-
Newtonsoft.Json: StringEnumConverter
-
System.Text.Json: EnumConverter
-
Configuração de
formatação:
-
Newtonsoft.Json: JsonSerializerSettings.Formatting = Formatting.Indented
-
System.Text.Json:
JsonSerializerOptions.WriteIndented = true
-
Configuração de
cultura:
-
Newtonsoft.Json: JsonSerializerSettings.Culture
-
System.Text.Json:
JsonSerializerOptions.PropertyNamingPolicy
-
Definindo nomes de
propriedades com camelCase:
-
Newtonsoft.Json: JsonSerializerSettings.ContractResolver = new
CamelCasePropertyNamesContractResolver()
-
System.Text.Json:
JsonSerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase
-
Definindo nomes de
propriedades com camelCase:
-
Newtonsoft.Json: JsonSerializerSettings.ContractResolver = new
CamelCasePropertyNamesContractResolver()
-
System.Text.Json:
JsonSerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase
-
Trabalhando com
datas:
-
Newtonsoft.Json: DateTimeZoneHandling, DateFormatHandling, DateTimeFormat
-
System.Text.Json:
JsonConverter<DateTime>, JsonConverter<DateTimeOffset>,
JsonSerializerOptions.Converters.Add(new DateTimeConverter())
-
Serialização/Deserialização de tipos genéricos:
-
Newtonsoft.Json: JsonConvert.DeserializeObject<T>(json)
-
System.Text.Json:
JsonSerializer.Deserialize<T>(json)
Assim,
a biblioteca
System.Text.Json é uma solução nativa e avançada para trabalhar com JSON na
plataforma .NET, oferecendo recursos poderosos e de alto desempenho para
serialização e desserialização de objetos JSON.
E estamos
conversados ...
"Porque toda a criatura de Deus é boa, e não há nada que rejeitar, sendo
recebido com ações de graças. Porque pela palavra de Deus e pela oração é
santificada."
1
Timóteo 4:4-5
Referências:
José Carlos Macoratti