C# 从服务方法返回字符串而不是对象是否变得越来越流行

C# 从服务方法返回字符串而不是对象是否变得越来越流行,c#,.net,wcf,asp.net-web-api,asp.net-web-api2,C#,.net,Wcf,Asp.net Web Api,Asp.net Web Api2,我似乎记得读过这样一篇文章:反序列化在C#中有点昂贵。我有一个C#服务返回一个对象。该对象将被下游客户端用作JSON 现在JSON已经成为最流行的服务响应格式,现在javascript框架已经成为首选的前端实现,服务只返回JSON字符串而不是对象是否变得越来越普遍 如果C#service方法返回一个对象,这意味着该对象必须从repo层映射,这是一种成本。当对象通过线路传递到客户端时,它将再次被序列化。那么,更多的服务只是返回字符串而不是对象吗 此外,Web API还具有返回JSONResult的

我似乎记得读过这样一篇文章:反序列化在C#中有点昂贵。我有一个C#服务返回一个对象。该对象将被下游客户端用作JSON

现在JSON已经成为最流行的服务响应格式,现在javascript框架已经成为首选的前端实现,服务只返回JSON字符串而不是对象是否变得越来越普遍

如果C#service方法返回一个对象,这意味着该对象必须从repo层映射,这是一种成本。当对象通过线路传递到客户端时,它将再次被序列化。那么,更多的服务只是返回字符串而不是对象吗


此外,Web API还具有返回JSONResult的概念。从服务方法返回字符串与从服务方法返回JSONResult有什么区别?

对不起,您必须挑剔您的语言

服务从未返回对象。它们返回位流,这是对象的序列化表示。有时,这些比特流使用UTF编码,实际上是字符串,其中包含XML,通常(例如,使用SOAP)表示对象。但它们仍然是弦

JSON也是一个字符串,它是一个或多个对象的序列化表示(这就是O所代表的)


所以你的问题有点毫无意义。服务继续返回对象,只是它们的序列化表示形式发生了一些变化。开发人员不再使用SOAP表示法,而是转向更简单、不太健谈的表示法,如JSON。

对不起,必须挑剔您的语言

服务从未返回对象。它们返回位流,这是对象的序列化表示。有时,这些比特流使用UTF编码,实际上是字符串,其中包含XML,通常(例如,使用SOAP)表示对象。但它们仍然是弦

JSON也是一个字符串,它是一个或多个对象的序列化表示(这就是O所代表的)


所以你的问题有点毫无意义。服务继续返回对象,只是它们的序列化表示形式发生了一些变化。开发人员不再使用SOAP表示,而是转向更简单、不太健谈的表示,如JSON。

做得好,字符串序列化仍然可以有效;也许在字节上没有原始二进制那么残酷,但也不需要太可怕。如果要发送的数据在字符串序列化和二进制序列化之间适合相同数量的数据包,那么网络时间不会有太大的不同。因此,在这些情况下,json在方便性和简单性方面具有吸引力。如果您需要绝对最佳的性能,那么原始二进制文件(定制的,或类似protobuf的东西)可能是您的首选。在许多情况下,json肯定比XML更有吸引力,XML是web服务历史上的默认值。

做得好,字符串序列化仍然可以有效;也许在字节上没有原始二进制那么残酷,但也不需要太可怕。如果要发送的数据在字符串序列化和二进制序列化之间适合相同数量的数据包,那么网络时间不会有太大的不同。因此,在这些情况下,json在方便性和简单性方面具有吸引力。如果您需要绝对最佳的性能,那么原始二进制文件(定制的,或类似protobuf的东西)可能是您的首选。在许多情况下,json肯定比XML更具吸引力,XML是web服务历史上的默认值。

除非您在整个服务中使用字符串(这将是非常低效的、有问题的,并且破坏了使用.NET的全部意义),在您的服务中的某个时刻,它需要将对象序列化为一个字符串,该字符串可以是json、xml或其他格式的字符串,以包含在您的服务的HTTP响应中


Web API框架及其之前的许多框架允许您使用框架自动序列化的.NET对象创建服务的表示。手动序列化对象并返回字符串没有任何好处,您所要做的只是更改对象序列化的点并引入冗余代码。

除非您要在整个服务过程中使用字符串(这将是非常低效的、有问题的,并挫败了使用.NET的全部意义),在您的服务中的某个时候,它将需要将对象序列化为一个字符串,该字符串可以是json、xml或其他格式的字符串,以包含在您服务的HTTP响应中


Web API框架及其以前的许多框架允许您使用框架自动序列化的.NET对象创建服务的表示。手动序列化对象和返回字符串没有任何好处,您所要做的只是更改对象序列化的点并引入redu大量代码。

我想您可能会感到困惑。JSON对象是JSON字符串。当响应HTTP请求时,JsonResult将自动序列化为JSON字符串。好处是您可以在代码中使用该对象访问底层数据,而无需再次反序列化响应。例如,在测试控制器方法时。您可以n使用Mark Gravell’s for,没有其他的那么贵。还有一些可供选择。我想您可能会感到困惑。JSON对象是一个JSON字符串。当响应HTTP请求时,JsonResult将自动序列化为JSON字符串。好处是您可以在代码中使用该对象来访问源代码