عند مقارنة newtonsoft.json و system.text.json في سياق MVVMCross ، تظهر عدة اختلافات رئيسية يمكن أن تؤثر على كيفية التعامل مع تسلسل JSON وفرس في تطبيقاتك عبر الطوابق.
السلوك الافتراضي
- Newtonsoft.json أكثر مرونة ومسامحة افتراضيًا. إنه يدعم مطابقة اسم الخاصية غير الحساسة للحالة ، مما يعني أنه يمكن أن يفلت من JSON حتى إذا كانت أسماء الممتلكات في سلسلة JSON لا تتطابق تمامًا مع حالة الخصائص في فئة C#. هذه المرونة مفيدة للتعامل مع البيانات من المصادر التي قد لا يكون الغلاف متسقًا [1] [4].
- System.text.json ، من ناحية أخرى ، صارمة وحساسة بشكل افتراضي. يتطلب ذلك مطابقة دقيقة بين أسماء خصائص JSON وأسماء الخصائص C# ، والتي يمكن أن تؤدي إلى أخطاء إلغاء التالي إذا لم تتطابق الحالات. ومع ذلك ، فإن هذا الصرامة يعزز الأداء والأمان [1] [4].
التسلسل والخروج
- Newtonsoft.json يسمح بمزيد من التسلسل التساهل والتسلسل. على سبيل المثال ، يمكنه تحويل القيم الرقمية إلى خصائص السلسلة والعكس بالعكس ، وهو أمر غير ممكن مع System.text.json خارج المربع. هذا يعني أنه إذا كان JSON الخاص بك يحتوي على قيمة رقمية ولكن الخاصية C# الخاصة بك عبارة عن سلسلة ، يمكن لـ Newtonsoft.json التعامل معها بسلاسة ، في حين أن system.text.json سيتخطى مثل هذه الحقول [5].
- System.Text.json يلتزم بدقة بمواصفات JSON (RFC 8259) ولا تدعم قيم رقمية هجر في خصائص السلسلة أو العكس دون تكوين إضافي. يتطلب محولات صريحة للتعامل مع مثل هذه السيناريوهات [4] [5].
الحرف الهروب
- Newtonsoft.json أقل صرامة حول هروب الشخصية. إنها تسمح لمزيد من الشخصيات بالمرور دون الهروب ، والتي يمكن أن تكون مفيدة لبعض السيناريوهات ولكنها قد تشكل مخاطر أمنية إذا لم تتم إدارتها بشكل صحيح [1].
-System.Text.json يهرب من المزيد من الشخصيات افتراضيًا ، بما في ذلك جميع الشخصيات غير ASCII وشخصيات HTML الحساسة ، لتوفير حماية أفضل ضد هجمات XSS [1].
دعم الحقل
- يدعم Newtonsoft.json الحقول التسلسلية والخروج مباشرة ، والتي يمكن أن تكون مفيدة في سيناريوهات معينة حيث لا تكون الخصائص قابلة للتطبيق.
- System.Text.json لا يدعم الحقول التسلسلية أو الهجر افتراضيًا. ومع ذلك ، بدءًا من .NET 5 ، يمكنك تمكين التسلسل الحقل عن طريق تحديد "jsonserializeroptions.includefields" إلى "صواب" أو باستخدام السمة "[jsoninclude]` على حقول محددة [3].
أداء
- System.Text.json أسرع بشكل عام من Newtonsoft.json ، خاصة بالنسبة لمجموعات البيانات الكبيرة ، نظرًا لتركيزه على تحسين الأداء [9].
التكامل مع MVVMCROSS
يستخدم MVVMCROSS غلافًا حول newtonsoft.json للتسلسل JSON و Deserialization. هذا يعني أنه عند استخدام MVVMcross ، من المحتمل أن تعمل مع سلوك Newtonsoft.json المرن بشكل افتراضي. إذا اخترت التبديل إلى System.text.json ، فستحتاج إلى ضبط إعدادات التسلسل الخاصة بك وربما إضافة محولات مخصصة لتتناسب مع السلوك الذي تحتاجه [2] [6].
باختصار ، بينما يوفر Newtonsoft.json المرونة والتوافق مع مجموعة واسعة من السيناريوهات ، System.text.json يعطي الأولوية للأداء والأمان والالتزام الصارم بمعايير JSON. يعتمد الاختيار بينهما في MVVMcross على متطلباتك المحددة وما إذا كنت بحاجة إلى مرونة Newtonsoft.json أو أداء وأمان System.text.json.
الاستشهادات:[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-serialization/
[6] https://www.nuget.org/packages/mvvmcross.plugin.json/
[7]
[8] https://stackoverflow.com/questions/71375019/how-to-workaround-newtonjson-and-system-text-json-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-json-core-3-0
[12]