我似乎记得在C#中反序列化有点贵。我有一个返回对象的C#服务。该对象将被下游客户端用作JSON。
现在JSON已成为最受欢迎的服务响应格式,现在javascript框架已成为首选的前端实现,服务变得越来越常见,只返回JSON字符串而不是对象?
如果C#服务方法返回一个对象,这意味着该对象必须从repo层映射,这是一个成本。当对象通过线路传递给客户端时,对象将被再次序列化。那么更多的服务只是返回字符串而不是对象?
此外,Web API具有返回JSONResult的概念。从服务方法返回字符串与从服务方法返回JSONResult的区别是什么?
答案 0 :(得分:4)
抱歉,不得不挑剔你的语言。
服务永远不会返回对象。它们返回比特流,它是对象的序列化表示。有时这些比特流使用UTF编码,实际上是包含XML的字符串,通常(例如,使用S O AP)表示对象。但它们仍然是弦乐。
JS O N也是一个字符串,它是一个或多个对象的序列化表示(这就是O代表的东西)。
所以你的问题有点无意义。服务继续返回对象,只是它们的序列化表示已经发生了一些变化。开发人员不再使用SOAP表示,而是转向更简单且不那么繁琐的表示,如JSON。
答案 1 :(得分:2)
做得好,字符串序列化仍然可以高效;也许不像原始二进制文件那样残酷,但它并不需要太可怕。如果您发送的数据在字符串和二进制序列化之间的数据包数量相同,那么网络时间就不会那么大了。所以在这些情况下,json在方便性和简单性方面具有吸引力。如果你需要绝对最好的性能高于所有其他考虑因素,原始二进制(定制,或类似protobuf)可能是你的首选。在许多情况下,json肯定比 lot 更具吸引力,而XML则是Web服务历史上的默认设置。
答案 2 :(得分:0)
除非您打算在整个服务中使用字符串(这将非常无效,有问题并且无法完全使用.NET),在您的服务中的某个时刻,它需要将对象序列化为字符串可以是json,xml或其他一些格式化的字符串,包含在您服务的HTTP响应中。
Web API框架和许多之前允许您使用.NET对象创建服务的表示形式,框架会自动为您序列化。手动序列化对象和返回字符串没有任何好处,您所要做的就是更改对象序列化的位置并引入冗余代码。