Как прочитать и сопоставить входящую строку Json из ajax в C # asp.ne Контроллер MVC

#c# #ajax #asp.net-mvc-5

#c# #ajax #asp.net-mvc-5

Вопрос:

Ajax:

  $.ajax({
        async: true,
        type: 'Post',
        contentType: 'application/json',
        dataType: 'json',
        traditional: true,
        processData: false,
        data: JSON.stringify(myData),
        url: '/Shopping/Order',
        success: function (response) {
            console.log("response.sussces: "   response.success);
            console.log("response.message: "   response.message);
            console.log("response.data: "   response.data);
        },
        error: function (response) {
            console.log(response);
        }
    });
 

Я пытаюсь выполнить итерацию списка элементов, который поставляется в формате json как

 {
 "ItemList": [
  {
    "id": 3,
    "name": "Item 3",
    "desc": "Lorem Ipsum is simply dummy text",
    "price": 361.05,
    "image": "../images/no_image.png",
    "count": 1
  },
  {
    ...
  },
  ...
 ]
}
 

мой контроллер:

     [HttpPost]
    public JsonResult Order([FromBody] ItemList list)
    {

        var response = new
        {
            Success = true,
            Message = "Item Added Succesfully",
            Data = list.Items.Count() // result: System.ArgumentNullException: value can't be null
        };

        var jsonResult = Json(response);

        return jsonResu<
    }
 

когда я назначаю список.toString() для данных.
Значение данных становится ( демонстрация.Контроллеры.Список элементов ).

С другой стороны, я получаю входящие данные из ajax, когда объявляю параметр как тип объекта.

Контроллер после модификации:

     [HttpPost]
    public JsonResult Order([FromBody] Object list)
    {


        var response = new
        {
            Success = true,
            Message = "Item Added Succesfully",
            Data = list.ToString()
        };

        var jsonResult = Json(response);

        return jsonResu<
    }
 

Любая помощь будет оценена.

Отредактировано: Классы элементов и списков элементов

     public class Item
    {
      public int Id { get; set; }
      public string Name { get; set; }
      public string Desc { get; set; }
      public double Price { get; set; }
      public string Image { get; set; }
      public int Count { get; set; }
    }

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

Список строк Json: var myData = {ItemList: JSON.parse(sessionStorage.getItem('shoppingCart'))};

для создания этого:

«ItemList»: [ { «id»: 3, «name»: «Item 3», «desc»: «Lorem Ipsum — это просто фиктивный текст», «price»: 361.05, «image»: «../images/no_image.png», «count»: 1 }, { … }, … ] }

Комментарии:

1. Должен ли ваш Json иметь { перед собой свойство ItemList , упомянутое в, для создания этого:

2. Спасибо за примечание, я не заметил, что фигурные скобки. 🙂

Ответ №1:

ItemList является свойством вашего объекта JSON. Итак, создайте новый класс, как показано ниже, и он должен иметь свойство ItemList as .

 public class OrderRequest
{
    public ItemList ItemList {get; set; }
}
 

И измените подпись действия на

 [HttpPost]
public JsonResult Order([FromBody]OrderRequest orderRequest)
 

и для доступа к счетчику

 Data = orderRequest.ItemList.Items.Count() 
 

Комментарии:

1. та же проблема, я получил «System.NullReferenceException: ссылка на объект не установлена для экземпляра объекта»

2. Можете ли вы опубликовать структуру классов ItemList в своем вопросе?

3. Извините, я забыл опубликовать вместе с вопросом, я только что отредактировал.