我是否需要向ServiceStack的JsonServiceClient.Get提供IReturn或IReturnVoid引用?必须有一个很好的理由(我对框架很新)但我不明白为什么我必须将我的对象转换为IReturn包装器或使它们依赖ServiceStack。
我已阅读这些帖子,但找不到我要找的解释(只有解决方法):
谢谢!
答案 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客户端:
通用网络浏览器:
通用HTTP客户端:
ServiceStack的JsonServiceClient:
通常,你会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