我使用Xamarin中的C#ServiceStack PCL客户端尝试将来自远程服务的响应DTO映射到我的客户端的域数据模型。该服务很好,我能够成功获得DTO。但是,似乎无论我制作DTO或Domain Model的方法多么简单,当我调用ConvertTo或PopulateWith以将该DTO转换为本地域模型时,我仍然会遇到ArgumentException。所以,我已经简化了我的测试到一个非常简单的测试,但仍然失败。这里是我的数据对象:ServiceStack ArgumentException将Dto映射到域模型
public class TestDto
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
public class TestModel
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
转换通话也很简单:
var testDto = new TestDto() {FirstName = "First", LastName = "Last"};
var testModel = testDto.ConvertTo<TestModel>();
当我打电话的ConvertTo,我得到System.ArgumentException以下消息:
方法在类型'Test.Core.Models.TestModel'上声明的'Void set_FirstName(System.String)'不能用'System.String'类型的实例调用
调用var testModel = new TestModel().PopulateWith(testDto);
导致相同的例外。因此,将属性的数据类型从字符串更改为int,布尔等等。
我已经遍寻搜索,感觉就像我正按照ServiceStack,他们的例子所做的一样,我在Stack Overflow上找到的所有东西。见链接在这里:
- https://github.com/ServiceStack/ServiceStack/wiki/Auto-mapping
- https://github.com/ServiceStackApps/HelloMobile
- How do I translate complex objects in ServiceStack?
(注意的ConvertTo原名TranslateTo在旧版本ServiceStack)
因此,事实上,我得到这个异常让我觉得我错过了我的项目设置非常基本的东西,或者我错过了一个步骤我不知何故需要配置我的对象或ServiceStack来启用转换。我知道我可以使用Automapper,但是当ServiceStack已经声明有内置的功能时,我宁愿不必拉入另一个库。但是,我不确定此时该做什么。任何想法可能导致这个或我应该看的建议?
我会推荐使用automapper这是一个更强大的impl – 2014-09-25 17:10:49
你是哪个平台得到这个错误? – mythz 2014-09-25 19:25:42
ServiceStack客户端代码本身位于Xamarin PCL中。到目前为止,我的测试仅在Android上进行。 – thedigitalsean 2014-09-25 19:51:23