我玩的收穫API和我試圖自動實體映射儘可能地簡單,不幸的是當我做了要求如GET /projects
它產生的結果,像這樣:動態反序列化到一個屬性RestSharp
Project
財產
client.Execute<List<Project>>(request)
:
[{
project: {
name: "Test"
}
},
{
project: {
name: "Test 2"
}]
在RestSharp,我不能直接做到這一點。所以,我不得不做出這樣的具有財產另一個類,並調用它像這樣:
client.Execute<List<ProjectContainer>>(request)
我不想讓每一個實體「容器」類,所以我想我找到了一個巧妙的解決使一類我可以在所有使用:
public class ListContainer<T> where T : IHarvestEntity
{
public T Item { get; set; }
}
但是,當然,解串器不知道它需要實體名稱(或「項目」)映射到財產Item
。在restsharp文檔中,我發現我可以使用[DeserializeAs(Name = "CustomProperty")]
來告訴解串器將哪個字段映射到此屬性。然而,屬性只允許常量,這意味着我不能這樣做:
[DeserializeAs(Name = typeof(T).FullName)]
public T Item { get; set; }
有沒有人知道一個聰明的解決方案呢?所以我不必創建10個不同的容器類?
動態對象可能是問題的答案,但很多開發商會警告你只實現XYZModel類並使用它們;您可以獲得編譯器的所有好處和保證,並且不會冒險(同一類)運行時異常。 –
民主我想我應該給你賞金,但我覺得從Mikko的答案更正確地回答了我的情況這個問題。因爲在你的例子中,我失去了自動映射到實體,這是背後的全部想法。我錯了嗎? – Chris
使用Mikko答案中的項目對象可以映射到對象:var project = new Project(o.SelectToken(「project」)。SelectToken(「name」)。Value) –