2013-10-14 5 views
1

я следующие 2 класса, которые крепят данные:C# JSON Сообщение от JavaScript

public class ItemList{ 
    public IList<Item> Items{get;set;} 
} 

public class Item{ 
    public int id {get;set} 
    public string name {get;set} 
} 

Мой контроллер выглядит так:

public virtual JsonResult SaveItems(ItemList items) 
    {} 

Я пытаюсь отправить объект JS, как это:

var toPost = { "items" : [ {"id" : 1, "name":"test}, {"id" : 1, "name":"test"}] } 


    $.ajax({ 
         type: "POST", 
         url: "URL TO POST TO", 
         dataType: "json", 
         data: toPost, 
         traditional: true, 
         success: function (data, status, request) { 
          if (data.Error != undefined) { 
           alert("System Error: " + data.Error); 

           return; 
          } 
          console.log("Success"); 

         }, 
         error: function (request, status, error) { 
          console.log("ERROR"); 
         } 
        }); 

Я делаю console.log перед тем, как опубликовать его, и данные выглядят так, как описано в toPost variab le, но при отладке на стороне C# ItemList items имеет значение

+0

TRY элементы с капиталом I (различное в классе и json string) – lordkain

+1

где тип контента attr? –

+0

Его dataType: "json" я использую – LmC

ответ

0

Ваш метод SaveItems ожидает объект ItemsList и то, что отправляется в запросе, является строкой. Вам нужно будет deserialise данные запроса в ваш ItemsList объекта что-то вроде следующего:

public virtual JsonResult SaveItems(String jsonRequest) 
{ 
    ItemsList items = Util.JsonSerializer.Deserialize<ItemsList>(jsonRequest); 

    // further processing of items 
} 
+0

неправда, C# имеет deafult deserializer! – lordkain

+0

@lordkain не по умолчанию. вы должны добавить ссылку на 'System.Web.Extensions.dll' –

3

Использование JSON.stringify в toPost и установить тип содержимого

$.ajax({ 
        ... 
        contentType: "application/json; charset=utf-8" 
        data: JSON.stringify(toPost), 
        ... 
}); 
+0

Когда вы строкой это то строка .. Так почему же контекст типа JSON, а не строка? – LmC

+1

stringify сериализует объект в строку JSON, чтобы он мог быть передан на сервер. Тип контента предназначен для того, чтобы сервер знал, что такое строка: это может быть JSON, строка запроса, XML и т. Д. – LostInComputer

+0

HTTP не понимает JSON. Json - это объектная нотация, а не объект в своем собственном праве. Таким образом, с точки зрения HTTP вы просто отправляете строку на сервер. Сервер, хотя и понимает Json, и знает, что если вы отправляете запрос с типом контента JSON, тогда строка в запросе может быть сериализована из JSON в объект. – Liam

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