Newtonsoft.jsonとsystem.text.jsonをMVVMCrossのコンテキストで比較する場合、クロスプラットフォームアプリケーションでJSONのシリアル化と脱滑りを処理する方法に影響を与える可能性のあるいくつかの重要な違いが現れます。
###デフォルトの動作
-Newtonsoft.jsonは、より柔軟でデフォルトで寛容です。 JSON文字列のプロパティ名がC#クラスのプロパティのケースと正確に一致しない場合でも、ケースに依存しないプロパティ名マッチングをサポートします。この柔軟性は、ケーシングが一貫していないソースからのデータを処理するのに有益です[1] [4]。
-System.text.jsonは、一方で、デフォルトでは厳格でケースに敏感です。 JSONプロパティ名とC#プロパティ名との間の正確な一致が必要であり、ケースが一致しない場合、敏arializationエラーにつながる可能性があります。ただし、この厳格さはパフォーマンスとセキュリティを向上させます[1] [4]。
###シリアル化と降下
-Newtonsoft.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」を「true」に設定するか、特定のフィールドに[Jsoninclude] `属性を使用することにより、フィールドシリアル化を有効にすることができます[3]。
### パフォーマンス
-System.Text.JSONは、特にパフォーマンスの最適化に焦点を当てているため、特に大規模なデータセットの場合、一般にNewtonsoft.jsonよりも高速です[9]。
MVVMCrossとの統合
MVVMCrossは、JSONのシリアル化と脱派化のためにNewtonsoft.json周辺のラッパーを使用しています。これは、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-- 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-differences
[9] https://www.youtube.com/watch?v=ocwodu8y3si
[10] https://stackoverflow.com/questions/18488310/mvvvmcross-deserilization-eror-for-json
[11] https://www.telerik.com/forums/data-ndata-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/