Iam尝试集成ServiceStack C#客户端以连接到后端(REST)。 FTR,iam在PCL库中,使用MvvMCross作为Xamarin之上的框架(如果有任何intereset)
基本通信正在运行,但现在我必须将响应模型(DTO?)映射到我在应用程序中使用的DomainModels。
当DTO和DomainModel不同时,我现在对ServiceStack提供的内容感到非常困惑。有关AutoMapper的讨论,或使用ConvertTo或DynamicModel时它的相关性。万一,我觉得只是有一个误解DTO应该是什么,所以不要介意我,如果我混淆了什么,生病的尝试适应:)
让我说我的DomainModel看起来像
public class Checkout {
public int id;
public String title;
public String foo;
}
响应DTO看起来像这样(在json中)
public class CheckoutDto {
public int id;
public String name;
public String bar;
}
现在我想在使用ServiceStack客户端时将名称映射到title和bar到foo。 Iam现在不确定如何结合"响应"在ServiceClient 4.x API中与DTO本身相比(它应该是相同的吗?)
_restClient.Get<CheckoutResponse>("/checkout/1");
我的具体问题是: - 我应该用ServiceStack采取什么赌注方法? - 我应该使用AutoMapper和Mapper.Create / Mapper.Map从DTO / toDTO转换吗? - 我是否混淆了术语(所以我的问题很难理解,甚至很复杂?)
我已经阅读了有关此主题的服务堆栈上的几篇帖子,包括servicestack / wiki上的文档以及googles资源 - 我似乎不明白这一点。
谢谢!
答案 0 :(得分:2)
我建议walking through some the existing examples。
Email Contacts是一个很好的例子,因为它引导您使用recommended structure从头开始创建ServiceStack解决方案,即将所有数据传输对象(DTO)放在一个单独的程序集中,例如: Project.ServiceModel
许多ORM(如OrmLite)允许您将POCO保存在首选的RDBMS中,因此在很多情况下,您可以将已填充的DTO直接保存在数据库中。但是当你的DTO和数据模型的模式发生分歧时,最好对它们进行映射,built-in Auto-Mapping可以让你轻松地进行映射。
在调用服务时,您通常不需要在使用ServiceStack's typed C# Service Clients时指定任何URL,因为当您传入填充的Request DTO时它将自动使用首选路由,例如:
[Route("/checkout/{Id}")]
public class Checkout : IReturn<CheckoutResponse>
{
public int Id { get; set; }
public String Title { get; set; }
public String Foo { get; set; }
}
然后,您可以在客户端使用上述请求DTO,如:
var client = new JsonServiceClient(BaseUrl);
CheckoutResponse response = client.Get(new Checkout { Id = 1 });