Pri porovnaní newtonsoft.json a system.text.json v kontexte MVVMCross sa objaví niekoľko kľúčových rozdielov, ktoré môžu ovplyvniť spôsob, akým zvládnete serializáciu a deserializáciu JSON vo vašich aplikáciách medzi platformami.
Predvolené správanie
- Newtonsoft.json je v predvolenom nastavení flexibilnejší a odpúšťa. Podporuje porovnávanie názvu necitlivého na prípady, čo znamená, že môže deserializovať JSON, aj keď názvy vlastností v reťazci JSON sa presne nezhodujú s prípadom vlastností vo vašej triede C#. Táto flexibilita je prospešná pre zaobchádzanie s údajmi zo zdrojov, kde kryt nemusí byť konzistentné [1] [4].
- System.text.json, na druhej strane, je v predvolenom nastavení prísny a citlivý na prípad. Vyžaduje si presné zhody medzi názvami vlastností JSON a názvami vlastností C#, čo môže viesť k chybám deserializácie, ak sa prípady nezhodujú. Táto prísnosť však zvyšuje výkon a bezpečnosť [1] [4].
Serializácia a deserializácia
- Newtonsoft.json umožňuje miernejšiu serializáciu a deserializáciu. Napríklad môže previesť číselné hodnoty na vlastnosti reťazca a naopak, čo nie je možné pomocou systému System.Text.json po políčku. To znamená, že ak váš JSON obsahuje číselnú hodnotu, ale vaša vlastnosť C# je reťazec, newtonsoft.json ju dokáže zvládnuť hladko, zatiaľ čo System.text.json takéto polia preskočí [5].
- System.text.json prísne dodržiava špecifikáciu JSON (RFC 8259) a nepodporuje deserializáciu číselných hodnôt do vlastností reťazca alebo naopak bez ďalšej konfigurácie. Na zvládnutie týchto scenárov vyžaduje explicitné prevodníky [4] [5].
Uniknutie postavy
- newtonsoft.json je menej prísny, pokiaľ ide o úniku postavy. Umožňuje viac postáv prejsť bez úteku, čo môže byť prospešné pre určité scenáre, ale môže predstavovať bezpečnostné riziká, ak sa nebude riadne riadiť [1].
-System.text.json predvolene uniká viac znakov, vrátane všetkých znakov, ktoré nie sú ASCII a znakov citlivé na HTML, zabezpečujú lepšiu ochranu pred útokmi XSS [1].
Podpora poľa
- Newtonsoft.json podporuje priamo sériové a deserializačné polia, ktoré môžu byť užitočné v určitých scenároch, v ktorých nie sú použiteľné vlastnosti.
- System.Text.json predvolene nepodporuje sériové ani deserializačné polia. Od .NET 5 však môžete povoliť serializáciu poľa nastavením `jSonserializeroptions.includefields` na` true` alebo pomocou atribútu `[jsonInclude]„ atribút na konkrétne polia [3].
Výkon
- System.text.json je vo všeobecnosti rýchlejší ako Newtonsoft.json, najmä pre veľké súbory údajov, kvôli jeho zameraniu na optimalizáciu výkonnosti [9].
Integrácia s MVVMCross
MVVMCROSS používa obal okolo Newtonsoft.json na serializáciu a deserializáciu JSON. To znamená, že pri používaní MVVMCross pravdepodobne v predvolenom nastavení pracujete s flexibilným správaním spoločnosti Newtonsoft.json. Ak sa rozhodnete prepnúť na System.Text.json, musíte upraviť svoje nastavenia serializácie a prípadne pridať vlastné konvertory, aby zodpovedali potrebnému správaniu [2] [6].
Stručne povedané, zatiaľ čo Newtonsoft.json ponúka flexibilitu a kompatibilitu so širokou škálou scenárov, System.text.json uprednostňuje výkon, bezpečnosť a prísne dodržiavanie štandardov JSON. Výber medzi nimi v MVVMCross závisí od vašich konkrétnych požiadaviek a od toho, či potrebujete flexibilitu newtonsoft.json alebo výkon a bezpečnosť systému System.Text.json.
Citácie:[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-text-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-serialization-issue-with-system-text-thon-json-core-3-0
[12] https://www.reddit.com/r/dotnet/comments/14xgfjl/should_you_use_newtonsoftjson_or_systemtextjson/