2012-09-05 8 views
9

Próbuję uzyskać RestSharp do pracy z usługą spokojny, które mam. Wszystko wydaje się działać dobrze, z wyjątkiem sytuacji, gdy mój obiekt jest przekazywany za pośrednictwem POST zawiera listę (w tym przypadku lista string).Czy RestSharp może wysłać listę <string> w żądaniu POST?

Moja obiektu:

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

Gdy ten zostanie wysłany do serwera własność Children zostaje wysłany jako ciąg z treścią System.Collections.Generic.List`1[System.String].

ten sposób przesyłam obiektu:

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); 

Czy robię coś źle, czy jest to błąd w RestSharp? (Jeśli to robi różnicę, używam JSON, a nie XML.)

Odpowiedz

2

Miałem podobny problem z listą Guidów. Mój post będzie działał, ale lista nigdy nie będzie miała poprawnych danych. I hacked go odrobinę i używane Json.NET do serializacji obiektu

Issue I had on another stackoverflow post

wiem, że to nie jest idealne, ale załatwia sprawę

+0

używam ciągi JSON gdy ma do czynienia z IEnumerables w ViewModels MVC za to, co warte, więc nie sądzę, że jest to złe rozwiązanie w ogóle. –

8

To zależy na jakim serwerze masz uderzenia, ale jeśli jesteś trafienia kontroler ASP.NET Web API (i prawdopodobnie innych technologii server-side), to będzie działać, jeśli dodać każdy element w kolekcji w pętli:

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

Myślę, że to powinna być najlepsza odpowiedź. Nie ma jednego właściwego sposobu na obejście tego problemu i osobiście uważam, że RestSharp powinien w zasadzie stosować to domyślnie, biorąc pod uwagę, jak powszechne są IEnumerables w sieciowych frameworkach. W porównaniu do innych rozwiązań, które widziałem w tym poście i na podobnych stanowiskach, to rozwiązanie może być łatwo obudowane i nie opiera się na żadnej bibliotece zewnętrznej (co prawdopodobnie wprowadza pewne obciążenie na każdy węzeł w kolekcji). –

2

użytkowania 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); 

Api Side

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

Dzięki za odpowiedź @Koranger - czy wiesz, jak obiekt wyglądałby w parametrach - tak, że można uzyskać do niego dostęp w kontrolerze serwera? – BKSpurgeon

Powiązane problemy