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

时间:2013-09-14 14:17:48

标签: servicestack

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

我已阅读这些帖子,但找不到我要找的解释(只有解决方法):

谢谢!

1 个答案:

答案 0 :(得分:6)

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

HTTP上的JSON不提供任何类型信息。

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

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

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

同时,如果您或其他客户想要编写一般的“无类型”Web服务客户端,那么这些客户端也将按预期工作。

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

通用网络浏览器:

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

通用HTTP客户端:

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

ServiceStack的JsonServiceClient:

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

通常,你会reference the DTO type information from the client and the server project in a *.ServiceModel assembly,你可以在两端使用它。由于DTO和服务的任何类型信息都在“那里”,因此客户端将知道如何将JSON反序列化为正确的类型。 IReturn是对象上的“标记”(元数据) - 较旧的SS API使用不同的接口来执行相同的操作,但具有更多的冗长和更少的灵活性(REST与SOAP似乎有不同的回报)。

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

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