2012-09-05 1 views
9

Я пытаюсь получить RestSharp для работы с обслуживанием, которое у меня есть. Кажется, что все работает нормально, за исключением случаев, когда мой объект проходит через POST, содержит список (в данном конкретном случае список string).Может ли RestSharp отправить список <string> в запрос POST?

Моего объект:

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

У меня была аналогичная проблема со списком гидов. Мой пост будет работать, но в списке никогда не будет правильных данных. Я взломал его ABIT и использовал Json.NET сериализовать объект

Issue I had on another stackoverflow post

Я знаю, что это не является совершенным, но делает трюк

+0

Я использую JSON строки при работе с IEnumerables в MVC ViewModels для чего это стоит, так что я не думаю, что это плохое решение вообще. –

8

Это зависит от того, какой сервер вы удара, но если вы ударяя контроллер ASP.NET Web API (и, возможно, другие серверные технологии), он будет работать, если вы добавляете каждый элемент в коллекции в цикле:

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

Я думаю, что это должен быть главный ответ. Нет никого подходящего способа обойти это, и я лично считаю, что RestSharp должен использовать это по умолчанию, учитывая, как распространенные 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); 

Api Side

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

Спасибо за ответ @Koranger - знаете ли вы, как объект будет выглядеть в параметрах - чтобы его можно было получить в контроллере сервера? – BKSpurgeon

 Смежные вопросы

  • Нет связанных вопросов^_^