Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Jakie są różnice między NewTonsoft.json i System.Text.json w Mvvmcross


Jakie są różnice między NewTonsoft.json i System.Text.json w Mvvmcross


Porównując NewTonsoft.json i System.Text.json w kontekście MVVMCROSS, pojawiają się kilka kluczowych różnic, które mogą wpłynąć na sposób obsługi serializacji JSON i deserializacji w aplikacjach międzyplatformowych.

Domyślne zachowanie

- NewTonsoft.json jest bardziej elastyczne i domyślnie wybaczające. Obsługuje dopasowanie nazwy właściwości bezwrażające przypadki, co oznacza, że ​​może deserializować JSON, nawet jeśli nazwy właściwości w ciągu JSON nie pasują dokładnie do przypadku właściwości w klasie C#. Ta elastyczność jest korzystna dla obsługi danych ze źródeł, w których obudowa może nie być spójna [1] [4].

- z drugiej strony system.text.json jest domyślnie ścisły i wrażliwy na wielkość liter. Wymaga dokładnych dopasowań między nazwami właściwości JSON a nazwami właściwości C#, co może prowadzić do błędów deserializacji, jeśli przypadki nie pasują. Jednak ta surowość poprawia wydajność i bezpieczeństwo [1] [4].

Serializacja i deserializacja

- Newtonsoft.json pozwala na bardziej łagodną serializację i deserializację. Na przykład może przekonwertować wartości liczbowe na właściwości ciągów i odwrotnie, co nie jest możliwe w przypadku System.Text.json po polu. Oznacza to, że jeśli twój JSON zawiera wartość liczbową, ale Twoja właściwość C# jest ciągiem, NewTonsoft.json może z nią płynnie obsłużyć, podczas gdy system.text.json pomija takie pola [5].

- System.text.json przestrzega ściśle do specyfikacji JSON (RFC 8259) i nie obsługuje deserializacji wartości liczbowych w właściwości ciągu lub odwrotnie bez dodatkowej konfiguracji. Wymaga to wyraźnych konwerterów, aby obsłużyć takie scenariusze [4] [5].

uciekająca postać

- Newtonsoft.json jest mniej surowy w stosunku do ucieczki postaci. Pozwala przejść przez więcej znaków bez ucieczki, co może być korzystne dla niektórych scenariuszy, ale może stanowić ryzyko bezpieczeństwa, jeśli nie jest odpowiednio zarządzane [1].

-System.text.json domyślnie wymawia więcej znaków, w tym wszystkie znaki inne niż ASCII i znaki wrażliwe na HTML, aby zapewnić lepszą ochronę przed atakami XSS [1].

Wsparcie pola

- NewTonsoft.json obsługuje bezpośrednio serializowanie i deserializowanie, co może być przydatne w niektórych scenariuszach, w których nie mają zastosowania nieruchomości.

- System.text.json domyślnie nie obsługuje pól serializujących ani deserializujących. Jednak zaczynając od .NET 5, możesz włączyć serializację pola, ustawiając `` jsonserializerOptions.includefields 'na `` true' lub przy użyciu atrybutu `[jsonInclude]` na określonych polach [3].

Wydajność

- System.Text.json jest na ogół szybszy niż Newtonsoft.json, szczególnie w przypadku dużych zestawów danych, ze względu na jego nacisk na optymalizację wydajności [9].

Integracja z MVVMCROSS

MVVMCROSS używa opakowania wokół Newtonsoft.json do serializacji i deserializacji JSON. Oznacza to, że podczas korzystania z MVVMCROSS prawdopodobnie domyślnie współpracujesz z elastycznym zachowaniem NewTonsoft.json. Jeśli zdecydujesz się przełączyć na system.text.json, musisz dostosować ustawienia serializacji i być może dodać niestandardowe konwertery, aby dopasować potrzebne zachowanie [2] [6].

Podsumowując, podczas gdy NewTonsoft.Json oferuje elastyczność i kompatybilność z szerokim zakresem scenariuszy, system.text.json priorytetem jest wydajność, bezpieczeństwo i ścisłe przestrzeganie standardów JSON. Wybór między nimi w MVVMCROSS zależy od twoich konkretnych wymagań i tego, czy potrzebujesz elastyczności NewTonsoft.json, czy też wydajność i bezpieczeństwo systemu.text.json.

Cytaty:
[1] https://learn.microsoft.com/en-us/dotnet/standard/serializacja/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-Jsonsonserializer
[4] https://schneids.net/comparing-newtonsoft-json-with-System-Text-Json/
[5] https://www.seeleycoder.com/blog/net-core-json-serializacja/
[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-andsystem-text-json-differences
[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-and-serializacja-issue-with-System-Text-Json-core-3-0
[12] https://www.reddit.com/r/dotnet/comments/14xgfjl/should_you_use_newtonsoftjson_or_SystemTextJson/