c# - DataContractJsonSerializer 和 JavaScriptSerial

.NET Framework 附带 System.Runtime.Serialization.Json.DataContractJsonSerializer和 System.Web.Script.Serialization.JavaScriptSerializer ,两者都对 JSON 进行反序列化。我怎么知道何时选择其中一种类型而不是另一种? MSDN 并没有明确说明它们的相对优势是什么。

我们有几个使用或发出 JSON 的项目,到目前为止,为每个项目选择的类取决于每个项目的主要开发人员的意见。有些很简单,有两个具有复杂的逻辑,涉及从 JSON 生成托管类型(这些类型不紧密映射到流),但不强调速度,一个需要速度。至少到目前为止,没有人与 WCF 交互。

虽然我对替代库感兴趣,但我希望有人也能回答我的问题。

最佳答案

DataContractJsonSerializer 旨在与 WCF 客户端应用程序一起使用,其中序列化类型通常是 POCO 类,并应用了 DataContract 属性。没有 DataContract,没有序列化。 WCF 的映射机制使得发送和接收非常简单,但前提是你的平台是同构的。如果您开始混合使用不同的工具集,您的程序可能会跑偏。

JavaScriptSerializer 可以序列化任何类型,包括匿名类型(一种方式),并且以更一致的方式进行。您失去了 WCF 的“自动”功能,但获得了更多集成选项。

正如您在评论中看到的那样,AJAX 序列化有很多选项,为了解决您的速度与可维护性问题,可能值得研究它们以找到满足所有需求的解决方案团队,以减少长期的可维护性问题,因为每个人都以自己的方式做事。

2014-04-07 更新: 如果可以的话,我建议使用 JSON.NET。见 http://james.newtonking.com/json对本问题中考虑的 3 个库的审查的功能比较。

2015-05-26 更新: 如果您的公司需要使用商业许可产品,或者您需要每一个性能,您可能还想查看 https://servicestack.net/ .

关于c# - DataContractJsonSerializer 和 JavaScriptSerializer 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9301878/

相关文章:

json - 用 R 解析 JSON

javascript - 是否有任何实际理由为 JSON 键使用带引号的字符串?

javascript - 以 JSON 格式发布数据

json - 部分 JSON 在 Go 中解码为 map

json - 如何使用 curl 将 json 对象与数组一起放置

json - react-native 如何从本地JSON文件中获取数据?

json - 将 JSON 传递给 HTTP POST 请求

c# - XmlDocument - 从字符串加载?

javascript - ES6 模块实现,如何加载 json 文件

asp.net-mvc - 从 Asp.net WEBAPI 显式返回 JSON 字符串?