在MVVMCross的上下文中比较newtonsoft.json和System.text.json时,出现了几个关键差异,这些差异可能会影响您处理跨平台应用程序中JSON序列化和避免化的方式。
###默认行为
-Newtonsoft.json默认情况下更加灵活和宽容。它支持对案例不敏感的属性名称匹配,这意味着即使JSON字符串中的属性名称不完全匹配C#类中属性的情况,也可以对JSON进行审理。这种灵活性有益于处理壳体可能不一致的来源的数据[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开始,您可以通过将`jsonserializaizeoptions.includefields“设置为true”或使用``jsoninclude]``特定字段''[3]来启用字段序列化。
### 表现
-System.Text.JSON通常比Newtonsoft.json更快,尤其是对于大型数据集,由于其专注于性能优化[9]。
###与mvvmcross集成
MVVMCross使用newtonsoft.json周围的包装器进行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-system-text-json/migrate-from-newtonsoft
[2] https://www.mvvmcross.com/documentation/plugins/json
[3] https://stackoverflow.com/questions/58139759/how-to-to-use-class-fields-with-system-system-system-text-json-jsonserializer
[4] https://schneids.net/comparing-newtonsoft-json-with-system-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-system-text-json/
[8] https://stackoverflow.com/questions/71375019/how-to-to-workaround-newtonjson-and-system-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-serialization-issue-with-system-system-text-json-core-3-0
[12] https://www.reddit.com/r/dotnet/comments/14xgfjl/should_you_use_newtonsoftjson_or_or_systemtextjson/