Salīdzinot newtonsoft.json un System.Text.json MVVMCross kontekstā, rodas vairākas galvenās atšķirības, kas var ietekmēt to, kā jūs rīkojaties ar JSON serializāciju un deserializāciju savās starpplatformas lietojumprogrammās.
Noklusējuma uzvedība
- Newtonsoft.json ir elastīgāks un piedodošs pēc noklusējuma. Tas atbalsta gadījumu jutīgu īpašuma nosaukuma saskaņošanu, kas nozīmē, ka tas var pārvērtēt JSON pat tad, ja JSON virknes īpašumu nosaukumi precīzi neatbilst jūsu C# klases īpašumu gadījumam. Šī elastība ir izdevīga, lai apstrādātu datus no avotiem, kur apvalks varētu nebūt konsekvents [1] [4].
- System.text.json, no otras puses, pēc noklusējuma ir stingra un jutīga pret gadījumiem. Tas prasa precīzu sakritību starp JSON īpašumu nosaukumiem un C# īpašumu nosaukumiem, kas var izraisīt pārvērtēšanas kļūdas, ja gadījumi neatbilst. Tomēr šī stingrība uzlabo veiktspēju un drošību [1] [4].
Serializēšana un deserializācija
- Newtonsoft.json ļauj saudzīgāku serializāciju un deserializāciju. Piemēram, tas var konvertēt skaitliskās vērtības par rekvizītiem un otrādi, kas nav iespējams ar sistēmu.Text.json ārpus lodziņa. Tas nozīmē, ka, ja jūsu JSON ir skaitliska vērtība, bet jūsu C# īpašums ir virkne, Newtonsoft.json var ar to nemanāmi rīkoties, turpretī System.Text.json izlaidīs šādus laukus [5].
- System.Text.json stingri ievēro JSON specifikāciju (RFC 8259) un neatbalsta skaitlisko vērtību iegūšanu virkņu īpašībās vai otrādi bez papildu konfigurācijas. Tas prasa skaidriem pārveidotājiem, lai apstrādātu šādus scenārijus [4] [5].
varoņu aizbēgšana
- Newtonsoft.json mazāk stingri izturas pret varoņu aizbēgšanu. Tas ļauj vairāk rakstzīmju iziet cauri, neizbēgot, kas var būt izdevīgi noteiktiem scenārijiem, bet var radīt drošības riskus, ja tie netiek pareizi pārvaldīti [1].
-System.Text.json pēc noklusējuma izvairās no vairāk rakstzīmju, ieskaitot visas rakstzīmes, kas nav ACII un HTML jutīgas rakstzīmes, lai nodrošinātu labāku aizsardzību pret XSS uzbrukumiem [1].
lauka atbalsts
- Newtonsoft.json tieši atbalsta sērijveida un pārvērtēšanas laukus, kas var būt noderīgi noteiktos scenārijos, kur īpašības nav piemērojamas.
- System.Text.json pēc noklusējuma neatbalsta lauku serializēšanu vai deserializēšanu. Tomēr, sākot no .NET 5, jūs varat iespējot lauka serializāciju, iestatot `jsonserializeroptions.includefields` uz“ patiesu ”vai izmantojot īpašos laukos atribūtu` [jsoninclude] `atribūts [3].
Veiktspēja
- System.Text.json parasti ir ātrāks nekā Ņūtonsoft.json, īpaši lielām datu kopām, jo tā koncentrējas uz veiktspējas optimizāciju [9].
integrācija ar mvvmcross
MVVMCROSS izmanto iesaiņojumu ap Newtonsoft.json JSON serializācijas un deserializācijas veikšanai. Tas nozīmē, ka, izmantojot MVVMCross, jūs, iespējams, strādājat ar Newtonsoft.json elastīgo izturēšanos pēc noklusējuma. Ja izvēlaties pārslēgties uz sistēmu.text.json, jums būs jāpielāgo serializācijas iestatījumi un, iespējams, jāpievieno pielāgoti pārveidotāji, lai tie atbilstu nepieciešamajai uzvedībai [2] [6].
Rezumējot, lai gan Newtonsoft.json piedāvā elastību un savietojamību ar plašu scenāriju klāstu, System.Text.json prioritizētu veiktspēju, drošību un stingru JSON standartu ievērošanu. Izvēle starp tiem MVVMCROSS ir atkarīga no jūsu īpašajām prasībām un no tā, vai jums ir nepieciešama Ņūtonsoft.jsona elastība vai sistēmas.Text.json veiktspēja un drošība.
Atsauces:[1] https://learn.microsoft.com/en-us/dotnet/standard/serialization/system-text-json/migrate-from-wtonsoft
[2] https://www.mvvmcross.com/documentation/plugins/json
[3] https://stackoverflow.com/questions/58139759/how-to-use-class-fields-with-system-text-json-jsonserializerizer
[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-workound-newtonjson-and-system-text-json-differences
[9] https://www.youtube.com/watch?v=ocwodu8y3Si
[10] https://stackoverflow.com/questions/18488310/mvvmcross-denserilization-error-for-json
[11] https://www.telerik.com/forums/data-dating-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/