在JsonServiceClient.Get中的IReturn和IReturnVoid的目的

Ste*_*ley 2 servicestack

我有必要向ServiceStack的JsonServiceClient.Get提供IReturn或IReturnVoid引用吗?必须有一个很好的理由(我对框架很新)但我不明白为什么我必须将我的对象转换为IReturn包装器或使它们依赖于ServiceStack.

我已阅读这些帖子,但找不到我正在寻找的解释(仅解决方法):

谢谢!

Rau*_*ess 6

JSON是一种无类型数据格式.好吧,有字符串和数字,数组和键/值对 - 这就是它.

JSON over HTTP不提供任何类型信息.

ServiceStack就像大多数其他使用HTTP + JSON的RESTful服务一样,可以像其他语言编写的其他服务一样工作 - 来回传递JSON.

将IReturn添加到服务方法不会使您的服务依赖于ServiceStack - 您可以使用任何其他HTTP客户端发出请求并在响应中返回JSON.

另外还有一个选项是使用"强类型"http客户端(JsonServiceClient),它将自动映射到客户端上与服务器端相同的.NET类型.因此,如果您想为您的服务编写本机C#/ .NET客户端,那将非常容易.

同时,如果您或其他客户想要编写通用的"无类型"Web服务客户端,那么这些客户端也将按预期工作.

以下是我喜欢的方法,使用ajax客户端,无类型的http + json Web服务客户端和ServiceStack客户端:

通用Web浏览器:

  • 请求(JSON) - > HTTP - > ServiceStack服务
  • 响应(JSON)< - HTTP < - ServiceStack服务

通用HTTP客户端:

  • 请求(JSON) - > HTTP - > ServiceStack服务
  • 响应(JSON)< - HTTP < - ServiceStack服务

ServiceStack的JsonServiceClient:

  • 请求(JSON x/.NET类型信息) - > HTTP - > ServiceStack服务IReturn
  • 响应(JSON x/.NET类型信息)< - HTTP < - ServiceStack服务IReturn

通常,您可以在*.ServiceModel程序集中引用客户端和服务器项目中的DTO类型信息,您可以在两端使用它.由于DTO和服务的任何类型信息都在"那里",因此客户端将知道如何将JSON反序列化为正确的类型.IReturn是对象上的"标记"(元数据) - 较旧的SS API使用不同的接口来执行相同的操作,但具有更多的冗长和更少的灵活性(REST与SOAP似乎有不同的回报).

另请注意,您的DTO不需要实施IReturn - 因此它们不需要依赖于SS.我更喜欢仅在"操作"或通信DTO上使用IReturn - 传递参数的那些.我喜欢保留映射到数据库表(即 - OrmLite)的DTO,而不依赖于IReturn.

https://github.com/ServiceStack/ServiceStack/wiki/C%23-client