我使用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