Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Milyen különbségek vannak a newtonSoft.json és a system.text.json között az mvvmcross -ban


Milyen különbségek vannak a newtonSoft.json és a system.text.json között az mvvmcross -ban


A NewtonSoft.json és a System.text.json összehasonlításakor az MVVMCross összefüggésében számos kulcsfontosságú különbség merül fel, amelyek befolyásolhatják a JSON sorosításának és a platformok közötti alkalmazások kezelésének módját.

Alapértelmezett viselkedés

- A newtonSoft.json alapértelmezés szerint rugalmasabb és megbocsátóbb. Támogatja a tok-érzékeny tulajdonságnév-illesztést, ami azt jelenti, hogy a JSON-t még akkor is, ha a JSON karakterláncban szereplő tulajdonságnevek nem felelnek meg pontosan a C# osztály tulajdonságainak esetével. Ez a rugalmasság előnyös az adatok kezelésére olyan forrásokból, ahol a burkolat nem következetes [1] [4].

- A System.text.json viszont alapértelmezés szerint szigorú és esetérzékeny. Pontos egyeztetést igényel a JSON tulajdonságnevek és a C# tulajdonságnevek között, ami desteriális hibákhoz vezethet, ha az esetek nem egyeznek meg. Ez a szigorúság azonban javítja a teljesítményt és a biztonságot [1] [4].

Serialization és Deserialization

- A newtonSoft.json lehetővé teszi az enyhébb sorozatot és a desterializációt. Például konvertálhatja a numerikus értékeket karakterlánc -tulajdonságokká, és fordítva, ami nem lehetséges a System.text.json -nál a dobozból. Ez azt jelenti, hogy ha a JSON tartalmaz numerikus értéket, de a C# tulajdonság egy karakterlánc, akkor a newtonSoft.json zökkenőmentesen képes kezelni, míg a system.text.json kihagyja az ilyen mezőket [5].

- System.text.json szigorúan ragaszkodik a JSON specifikációhoz (RFC 8259), és nem támogatja a numerikus értékek desterializálását karakterlánc -tulajdonságokra, vagy fordítva további konfiguráció nélkül. Az ilyen forgatókönyvek kezeléséhez explicit átalakítókat igényel [4] [5].

karakter menekül

- A newtonSoft.json kevésbé szigorúan a karakter menekülése miatt. Ez lehetővé teszi, hogy több karakter menekülés nélkül áthaladjon, ami bizonyos forgatókönyveknél hasznos lehet, de ha nem megfelelően kezelik, akkor biztonsági kockázatot jelenthet [1].

-A System.text.json alapértelmezés szerint több karaktertől, beleértve az összes nem ASCII karakteret és a HTML-érzékeny karaktert, jobb védelmet nyújt az XSS támadások ellen [1].

Field támogatás

- A newtonSoft.json közvetlenül támogatja a szérializáló és a vágyakozó mezőket, amelyek hasznosak lehetnek bizonyos forgatókönyvekben, ahol a tulajdonságok nem alkalmazhatók.

- A System.text.json alapértelmezés szerint nem támogatja a mezők sorozatosítását vagy destisizálását. A .NET 5 -től kezdve azonban engedélyezheti a mezői sorozatot a „JSonSerializeOptions.inCludefields” beállításával a „True” -re vagy a „[JSONInclude]` attribútum használatával az adott mezőkön [3].

Performance

- A System.text.json általában gyorsabb, mint a NewtonSoft.json, különösen a nagy adatkészletek esetében, mivel a teljesítmény optimalizálására összpontosít [9].

Integráció az mvvmcross -szal

Az MVVMCross a NewtonSoft.json körüli burkolót használja a JSON sorosításához és a vágyakozáshoz. Ez azt jelenti, hogy az mvvmcross használatakor valószínűleg alapértelmezés szerint a NewtonSoft.json rugalmas viselkedésével dolgozik. Ha úgy dönt, hogy vált a system.text.json -ra, akkor módosítania kell a sorozati beállításokat, és esetleg hozzáadnia kell az egyéni konvertereket, hogy megfeleljen a szükséges viselkedésnek [2] [6].

Összefoglalva: míg a NewtonSoft.json rugalmasságot és kompatibilitást kínál a forgatókönyvek széles skálájával, a System.Text.json a JSON szabványainak a teljesítményt, a biztonságot és a szigorú betartást. Az MVVMCross -ban történő választás az Ön konkrét követelményeitől és a NewtonSoft.json rugalmasságától vagy a System.text.json teljesítményétől és biztonságától függ.

Idézetek:
[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-differenciák
[9] https://www.youtube.com/watch?v=ocwodu8y3si
[10] https://stackoverflow.com/questions/18488310/mvvmcross-deserilization-ror-forjson
[11] https://www.telerik.com/forums/data-binding-and-serialization-issue-with-system-text-json-core-3-0
[12] https://www.reddit.com/r/dotnet/comments/14xgfjl/should_you_use_usewtonsoftjson_or_systemTextJson/