Ao comparar Newtonsoft.json e System.Text.json No contexto do MVVMCROSS, surgem várias diferenças importantes que podem impactar a maneira como você lida com a serialização e deseralização do JSON em seus aplicativos de plataforma cruzada.
comportamento padrão
- Newtonsoft.json é mais flexível e perdoador por padrão. Ele suporta correspondência de nome da propriedade insensível a casos, o que significa que pode deseralizar o JSON, mesmo que os nomes de propriedades na sequência JSON não correspondam exatamente ao caso das propriedades da sua classe C#. Essa flexibilidade é benéfica para lidar com dados de fontes onde o invólucro pode não ser consistente [1] [4].
- System.Text.json, por outro lado, é rigoroso e sensível ao caso por padrão. Requer correspondências exatas entre os nomes de propriedades JSON e os nomes de propriedades C#, o que pode levar a erros de desserialização se os casos não corresponderem. No entanto, esse rigor aumenta o desempenho e a segurança [1] [4].
Serialização e desserialização
- Newtonsoft.json permite mais serialização e desserialização brandos. Por exemplo, ele pode converter valores numéricos em Propriedades da String e vice -versa, o que não é possível com o System.Text.json pronta para uso. Isso significa que se o seu JSON contiver um valor numérico, mas sua propriedade C# for uma string, o newtonsoft.json pode lidar com isso perfeitamente, enquanto o System.text.json pulará esses campos [5].
- System.Text.json adere estritamente à especificação JSON (RFC 8259) e não suporta valores numéricos dessertantes nas propriedades da string ou vice -versa sem configuração adicional. Requer conversores explícitos para lidar com esses cenários [4] [5].
Funda de caracteres
- Newtonsoft.json é menos rigoroso sobre a fuga de personagens. Ele permite que mais caracteres passem sem escapar, o que pode ser benéfico para certos cenários, mas pode representar riscos de segurança se não for gerenciado corretamente [1].
-System.Text.json escapa a mais caracteres por padrão, incluindo todos os caracteres não-ASCII e caracteres sensíveis ao HTML, para fornecer melhor proteção contra ataques XSS [1].
Suporte de campo
- Newtonsoft.json suporta diretamente e a serializando os campos, que podem ser úteis em certos cenários em que as propriedades não são aplicáveis.
- System.Text.json não suporta campos serializando ou desserializando por padrão. No entanto, a partir do .NET 5, você pode ativar a serialização de campo definindo `jsonserializeroptions.includefields` para` true` ou usando o atributo '[jsoninclude] `em campos específicos [3].
Desempenho
- System.Text.json é geralmente mais rápido que o newtonsoft.json, especialmente para grandes conjuntos de dados, devido ao seu foco na otimização do desempenho [9].
integração com mvvmcross
O MVVMCROSS usa um invólucro em torno de Newtonsoft.json para serialização e desserialização do JSON. Isso significa que, ao usar o MVVMcross, você provavelmente está trabalhando com o comportamento flexível do Newtonsoft.json por padrão. Se você optar por mudar para system.text.json, precisará ajustar suas configurações de serialização e adicionar conversores personalizados para corresponder ao comportamento necessário [2] [6].
Em resumo, enquanto Newtonsoft.json oferece flexibilidade e compatibilidade com uma ampla gama de cenários, o System.Text.json prioriza o desempenho, a segurança e a estrita adesão aos padrões JSON. A escolha entre eles no MVVMcross depende de seus requisitos específicos e se você precisa da flexibilidade do newtonsoft.json ou no desempenho e segurança do System.Text.json.
Citações:[1] https://learn.microsoft.com/en-us/dotnet/standard/serialization/system-text-json/migrate-from-newtonsoft
[2] https://www.mvvmcross.com/documentation/plugins/json
[3] https://stackoverflow.com/questions/58139759/how-to-use-class-fields-with-system-text-json-jsonserializer
[4] https://schneids.net/comparing-newtonsoft-json-with-system-text-json/
[5] https://www.seeleycoder.com/blog/net-core-json-serialization/
[6] https://www.nuget.org/packages/mvvmcross.plugin.json/
[7] https://devblogs.microsoft.com/dotnet/whats-next-for-system-text-json/
[8] https://stackoverflow.com/questions/71375019/how-to-workaround-newtonjson-and-system-text-json-diferenças
[9] https://www.youtube.com/watch?v=ocwodu8y3si
[10] https://stackoverflow.com/questions/18488310/mvvmcross-deserilization-error-for-json
[11] https://www.telerik.com/forums/data-binding-andialization-iStue-with-system-text-json-core-3-0
[12] https://www.reddit.com/r/dotnet/comments/14xgfjl/should_you_use_newtonsoftjson_or_systemtextjson/