Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon MVVMCross'ta Newtonsoft.json ve System.text.json arasındaki farklar nelerdir


MVVMCross'ta Newtonsoft.json ve System.text.json arasındaki farklar nelerdir


MVVMCross bağlamında newtonsoft.json ve system.text.json karşılaştırırken, platformlar arası uygulamalarınızda JSON serileştirme ve serileştirmeyi nasıl ele aldığınızı etkileyebilecek birkaç temel fark ortaya çıkar.

Varsayılan davranış

- newtonsoft.json varsayılan olarak daha esnek ve affedicidir. Vaka duyarsız özellik adı eşleşmesini destekler, yani JSON String'teki özellik adları C# sınıfınızdaki özelliklerle tam olarak eşleşmese bile JSON'u süzünme yapabilir. Bu esneklik, gövdenin tutarlı olmayabileceği kaynaklardan verileri işlemek için faydalıdır [1] [4].

- System.text.json ise varsayılan olarak katı ve büyük / küçük harfe duyarlıdır. JSON özellik adları ile C# özellik adları arasında kesin eşleşmeler gerektirir, bu da vakalar eşleşmezse sazizleme hatalarına yol açabilir. Bununla birlikte, bu sıkılık performansı ve güvenliği arttırır [1] [4].

Serileştirme ve Sesselleştirme

- newtonsoft.json, daha yumuşak serileştirme ve serileştirme sağlar. Örneğin, sayısal değerleri Dize özelliklerine dönüştürebilir ve bunun tersi, System.text.json ile mümkün olmayan kutudan çıkabilir. Bu, JSON'nuz sayısal bir değer içeriyorsa, ancak C# özelliğiniz bir dize ise, newtonsoft.json sorunsuz bir şekilde işleyebilirken, System.text.json bu alanları atlayacaktır [5].

- System.text.json, JSON spesifikasyonuna (RFC 8259) kesinlikle yapışır ve sayısal değerleri String özelliklerine veya ek yapılandırma olmaksızın Dize özelliklerine veya tam tersine desteklemez. Bu tür senaryoları işlemek için açık dönüştürücüler gerektirir [4] [5].

karakter kaçıyor

- newtonsoft.json, karakter kaçma konusunda daha az katı. Daha fazla karakterin kaçmadan geçmesine izin verir, bu da belirli senaryolar için faydalı olabilir, ancak düzgün yönetilmezse güvenlik riskleri oluşturabilir [1].

-System.text.json, XSS saldırılarına karşı daha iyi koruma sağlamak için tüm ASCII olmayan karakterler ve HTML duyarlı karakterler de dahil olmak üzere varsayılan olarak daha fazla karakterden kaçar [1].

Saha Desteği

- newtonsoft.json, alanları doğrudan serileştirmeyi ve süzelleştirmeyi destekler, bu da özelliklerin uygulanamadığı belirli senaryolarda yararlı olabilir.

- System.text.json varsayılan olarak alanların serileştirilmesini veya serileştirilmesini desteklemez. Bununla birlikte, .NET 5'ten başlayarak, `JSonserializerOptions.includefields '' ye` true` olarak veya belirli alanlarda `` [JsonInclude] 'özelliğini kullanarak alan serileştirmeyi etkinleştirebilirsiniz [3].

Performans

- System.text.json, performans optimizasyonuna odaklanması nedeniyle, özellikle büyük veri kümeleri için Newtonsoft.json'dan genellikle daha hızlıdır [9].

mvvmcross ile entegrasyon

MVVMCross, JSON serileştirme ve serileştirme için newtonsoft.json çevresinde bir ambalaj kullanır. Bu, MVVMCross kullanırken, muhtemelen Newtonsoft.json'un esnek davranışıyla varsayılan olarak çalıştığınız anlamına gelir. System.text.json'a geçmeyi seçerseniz, serileştirme ayarlarınızı ayarlamanız ve muhtemelen ihtiyacınız olan davranışla eşleşmesi için özel dönüştürücüler eklemeniz gerekir [2] [6].

Özetle, newtonsoft.json, çok çeşitli senaryolarla esneklik ve uyumluluk sunarken, System.text.json, JSON standartlarına performansa, güvenliğe ve sıkı bağlılığa öncelik verir. MVVMCross'taki aralarındaki seçim, özel gereksinimlerinize ve newtonsoft.json'un esnekliğine veya System.text.json'un performansına ve güvenliğine ihtiyacınız olup olmadığına bağlıdır.

Alıntılar:
[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--system-text-json/
[5] https://www.seeleycoder.com/blog/net-core-json-serializasyon/
[6] https://www.nuget.org/packages/mvmcross.plugin.json/
[7] https://devblogs.microsoft.com/dotnet/whats-next-for-system-text-json/
[8] https://stackoverflow.com/questions/71375019/how-to-workaround-mewtonjson-and-system-text-json-ifferanslar
[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
[12] https://www.reddit.com/r/dotnet/comments/14xgfjl/should_you_use_newtonsoftjson_or_systemtextjson/