2012-09-05 27 views
9

我想讓RestSharp與我擁有的寧靜服務一起工作。似乎一切工作正常,除非我的對象通過POST傳遞包含一個列表(在這種特殊情況下,列表string)。Rest RestSharp可以在POST請求中發送列表<string>?

我的目標:

public class TestObj 
{ 
    public string Name{get;set;} 
    public List<string> Children{get;set;} 
} 

當這個被髮送到Children屬性,都會與內容System.Collections.Generic.List`1[System.String]字符串發送服務器。

這是怎麼了發送對象:

var client = new RestClient(); 
var request = new RestRequest("http://localhost", Method.PUT); 

var test = new TestObj {Name = "Fred", Children = new List<string> {"Arthur", "Betty"}}; 
request.AddObject(test); 
client.Execute<TestObj>(request); 

我做得不對,或者這是RestSharp的錯誤嗎? (如果它有所不同,我使用的是JSON,而不是XML。)

回答

2

我有一個Guid列表類似的問題。我的帖子會工作,但列表永遠不會有正確的數據。我升技砍死,並用json.net序列化對象

Issue I had on another stackoverflow post

我知道這是不是完美的,但不會把戲

+0

我使用JSON字符串與MVC的ViewModels IEnumerables對於什麼是值得打交道時,所以我不認爲這是一個不好解決的。 –

8

這要看你打的是什麼服務器,但如果你打一個ASP.NET Web API控制器(也可能是其他的服務器端技術),它會工作,如果你在收集在一個循環中添加的每個項目:

foreach (var child in test.Children) 
    request.AddParameter("children", x)); 
+1

我認爲這應該是最好的答案。沒有人適當的方式來解決這個問題,我個人認爲RestSharp應該在默認情況下采用這種方式,考慮Web框架中IEnumerables的流行情況。與我在本文以及類似帖子中看到的其他解決方案相比,此解決方案可以輕鬆封裝並且不依賴外部庫(可能會在集合中的每個節點上引入一些開銷)。 –

2

使用AddJsonBody

var client = new RestClient(); 
var request = new RestRequest("http://localhost", Method.PUT); 
request.AddJsonBody(new TestObj { 
    Name = "Fred", 
    Children = new List<string> {"Arthur", "Betty"} 
}); 
client.Execute(request); 

阿比側

[AcceptVerbs("PUT")] 
string Portefeuille(TestObj obj) 
{ 
    return String.Format("Sup' {0}, you have {1} nice children", 
     obj.Name, obj.Children.Count()); 
} 
+0

感謝您的答案@Koranger - 您是否知道對象在params中的外觀如何 - 因此可以在服務器控制器中訪問它? – BKSpurgeon