ServiceStack ArgumentException将Dto映射到域模型

时间:2014-09-25 16:18:39

标签: c# xamarin servicestack automapper dto

我正在使用Xamarin中的C#ServiceStack PCL客户端尝试将响应DTO从我的远程服务映射到我的客户端域数据模型。该服务运作良好,我能够成功获得DTO。但是,似乎无论我如何简单地制作DTO或域模型,当我调用ConvertTo或PopulateWith以便将DTO转换为我的本地域模型时,我仍然会得到ArgumentException。所以,我已经将我的测试简化为一个仍然失败的极其简单的测试。这是我的数据对象:

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并显示以下消息:

  

方法&#39; Void set_FirstName(System.String)&#39;声明在类型&#39; Test.Core.Models.TestModel&#39;不能使用类型&System; System.String&#39;

的实例调用

调用var testModel = new TestModel().PopulateWith(testDto);会导致同样的异常。那么将属性的数据类型从字符串更改为int,bool等

我已经搜索了所有内容,感觉就像我根据ServiceStack,他们的示例以及我在Stack Overflow上发现的所有内容做了我应该做的事情。请参阅此处的链接:

(请注意,ConvertTo以前在旧的ServiceStack版本中命名为TranslateTo)

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

1 个答案:

答案 0 :(得分:0)

这是由于bug in Android implementation of Compiled Expressions。在此期间,您可以通过禁用编译表达式来解决此问题:

PclExport.Instance.SupportsExpression = false;

ServiceStack的下一个 v4.0.32 + 版本中的fallback was added now on MyGet将在编译属性表达式时自动回退到使用反射失败。

相关问题