2014-06-23 3 views
0

Вот что я хочу, чтобы отправить к моему ServiceStack веб-службы:Deserialize массив с ServiceStack

$.ajax({ 
    url: 'http://localhost:8092/profiles', 
    type:'POST', 
    data: { 
     FirstName : "John", 
     LastName : "Doe", 
     Categories : [ "Category 1", "Category 2", "Category 3" ] 
    }, 
    success: function (response) { $('#response').append('Success!'); }, 
    error: function (xhr, ajaxOptions, thrownError) { 
     alert(xhr.status + ' Error: ' + thrownError); 
     }, 
    dataType: "json" 
}); 

А вот класс назначения:

[Route("/profiles", "POST")] 
public class ProfileRequest 
{ 
    public string FirstName{ get; set; } 
    public string LastName{ get; set; } 
    public string[] Categories{ get; set; } 
} 

Все поля заселяется за исключением массив. Может ServiceStack просто не обрабатывать объекты этой сложности или я что-то упускаю?

Примечание: Я видел Unable to deserialize array, который предлагает использовать JSON.stringify(), но это решение до сих пор, кажется, не работает, на самом деле это делает его хуже, вызывая никаких данных не будет десериализации.

ответ

3

ServiceStack может справиться с этим, но ваши данные JQuery $.ajax должен быть JSON строковой с использованием метода JSON.stringify() и установите contentType в application/json иначе JQuery будет пытаться разместить данные как application/x-www-form-urlencoded и deserialising потерпит неудачу.

Таким образом, ваш запрос должен быть:

$.ajax({ 
    url: 'http://localhost:8092/profiles', 
    type:'POST', 
    data: JSON.stringify({ 
     FirstName: "John", 
     LastName: "Doe", 
     Categories: [ "Category 1", "Category 2", "Category 3" ] 
    }), 
    success: function (response) { $('#response').append('Success!'); }, 
    error: function (xhr, ajaxOptions, thrownError) { 
     alert(xhr.status + ' Error: ' + thrownError); 
     }, 
    contentType: "application/json", 
    dataType: "json" 
}); 

Надежда, что помогает.

+0

Да, это была одна из вещей, которые я уже пробовал, но это не привело к тому, что данные не были десериализованы, а не только массив. –

+0

Похоже, я использую 3.9.56.0 –

+0

Это все еще не работает. Глядя на мои объекты C#, все значения равны нулю. Если я удалю JSON.stringify(), все будет заполнено, кроме массива. –

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