2014-09-25 116 views
0

我使用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上找到的所有东西。见链接在这里:

(注意的ConvertTo原名TranslateTo在旧版本ServiceStack)

因此,事实上,我得到这个异常让我觉得我错过了我的项目设置非常基本的东西,或者我错过了一个步骤我不知何故需要配置我的对象或ServiceStack来启用转换。我知道我可以使用Automapper,但是当ServiceStack已经声明有内置的功能时,我宁愿不必拉入另一个库。但是,我不确定此时该做什么。任何想法可能导致这个或我应该看的建议?

+0

我会推荐使用automapper这是一个更强大的impl – 2014-09-25 17:10:49

+0

你是哪个平台得到这个错误? – mythz 2014-09-25 19:25:42

+0

ServiceStack客户端代码本身位于Xamarin PCL中。到目前为止,我的测试仅在Android上进行。 – thedigitalsean 2014-09-25 19:51:23

回答