Palyginus Newtonsoft.json ir System.Text.json, atsižvelgiant į MVVMCross, atsiranda keli pagrindiniai skirtumai, kurie gali paveikti tai, kaip jūs elgiatės su JSON nuoseklumu ir deserializacija jūsų įvairių platformų programose.
Numatytasis elgesys
- Newtonsoft.json yra lankstesnis ir atleidžiantis pagal numatytuosius nustatymus. Tai palaiko bylų jautrumo nuosavybės pavadinimo atitikimą, tai reiškia, kad jis gali deserializuoti JSON, net jei JSON eilutės nuosavybės pavadinimai tiksliai neatitinka jūsų C# klasės ypatybių. Šis lankstumas yra naudingas tvarkant duomenis iš šaltinių, kuriuose korpusas gali būti ne nuoseklus [1] [4].
- System.text.json, kita vertus, pagal numatytuosius nustatymus yra griežtas ir jautrus atvejams. Tam reikia tikslių atitikmenų tarp JSON nuosavybės pavadinimų ir C# nuosavybės pavadinimų, dėl kurių gali sukelti deserializacijos klaidas, jei atvejai nesutampa. Tačiau šis griežtumas padidina našumą ir saugumą [1] [4].
serializacija ir deserializacija
- Newtonsoft.json leidžia švelnesnį serializaciją ir deserializaciją. Pvz., Jis gali konvertuoti skaitmenines reikšmes į eilutės ypatybes ir atvirkščiai, o tai neįmanoma naudojant „System.Text.json“ iš dėžutės. Tai reiškia, kad jei jūsų JSON turi skaitinę vertę, tačiau jūsų C# ypatybė yra eilutė, Newtonsoft.json gali su ja elgtis sklandžiai, tuo tarpu „System.Text.json“ praleis tokius laukus [5].
- System.Text.json griežtai laikosi JSON specifikacijos (RFC 8259) ir nepalaiko skaitmeninių reikšmių deserializacijos į eilutės ypatybes arba atvirkščiai be papildomos konfigūracijos. Norint tvarkyti tokius scenarijus, reikia aiškių keitiklių [4] [5].
Pabėgimas
- Newtonsoft.json yra mažiau griežtas dėl veikėjo pabėgimo. Tai leidžia daugiau simbolių praeiti per pabėgimą, o tai gali būti naudinga tam tikriems scenarijams, tačiau gali kelti saugumo riziką, jei ji nebus tinkamai valdoma [1].
-System.Text.json pagal numatytuosius nustatymus išvengia daugiau simbolių, įskaitant visus ne ASCII simbolius ir HTML jautrius simbolius, kad būtų užtikrinta geresnė apsauga nuo XSS atakų [1].
Lauko palaikymas
- Newtonsoft.json palaiko tiesiogiai nuoseklumo ir deserializavimo laukus, kurie gali būti naudingi tam tikruose scenarijuose, kur savybės netaikomos.
- System.text.json nepalaiko nuoseklumo ar deserializacijos laukų pagal numatytuosius nustatymus. Tačiau, pradedant nuo .NET 5, galite įgalinti lauko serializaciją, nustatydami „jsonSerializerizeroPtions.includefields“ į „tiesa“ arba naudodami „[JSonInclude]` atributą konkrečiuose laukuose [3].
Performansas
- System.Text.json paprastai yra greitesnis nei Newtonsoft.json, ypač dideliems duomenų rinkiniams, dėl jo dėmesio skiriama našumo optimizavimui [9].
integracija su MVVMCross
„MVVMCross“ naudoja įvyniojimą aplink Newtonsoft.json JSON serializacijai ir deserializacijai. Tai reiškia, kad naudodamiesi „MVVMCross“ greičiausiai dirbate su „Newtonsoft.json“ lanksčiu elgesiu pagal numatytuosius nustatymus. Jei nuspręsite pereiti prie „System.Text.json“, jums reikės sureguliuoti savo serializacijos parametrus ir galbūt pridėti pasirinktinius keitiklius, kad atitiktų jums reikalingą elgesį [2] [6].
Apibendrinant galima pasakyti, kad „Newtonsoft.json“ siūlo lankstumą ir suderinamumą su įvairiais scenarijais, „System.text.json“ teikia pirmenybę našumui, saugumui ir griežtai laikytis JSON standartų. Pasirinkimas tarp jų „MvVMCross“ priklauso nuo jūsų konkrečių reikalavimų ir nuo to, ar jums reikia „Newtonsoft.json“ lankstumo, arba „System.text.json“ veikimo bei saugumo.
Citatos:[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/comparling-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-diferences
[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-dining-and-serialization-issue-with-system-text-json-core-3-0
[12] https://www.reddit.com/r/dotnet/comments/14xgfjl/should_you_use_newtonsoftjson_or_systemtextjson/