Опубликовать массив объектов через JSON в ASP.Net MVC3

Я ищу решение для POST-отправки массива объектов в MVC3 через JSON.

Пример кода, над которым я работаю: http://weblogs.asp.net/scottgu/archive/2010/07/27/introduction-asp-net-mvc-3-preview-1.aspx

JS:

var data = { ItemList: [ {Str: 'hi', Enabled: true} ], X: 1, Y: 2 };

$.ajax({
    url: '/list/save',
    data: JSON.stringify(data),
    success: success,
    error: error,
    type: 'POST',
    contentType: 'application/json, charset=utf-8',
    dataType: 'json'
});

ListViewModel.cs:

public class ListViewModel
{
    public List ItemList { get; set; }
    public float X { get; set; }
    public float Y { get; set; }
}

ItemViewModel.cs:

public class ItemViewModel
{
    public string Str;   // originally posted with: { get; set; }
    public bool Enabled; // originally posted with: { get; set; }
}

ListController.cs:

public ActionResult Save(ListViewModel list)
{
    // Do something
}

Результатом этого списка POST:

устанавливается значение ListViewModel
Его свойства X и Y установлены
Базовое свойство ItemList установлено
ItemList содержит один элемент, как и должен
Элемент в этом списке предметов не инициализирован. Str имеет значение null, а Enabled - false.

Другими словами, это то, что я получаю от привязки модели MVC3:

list.X == 1
list.Y == 2
list.ItemList != null
list.ItemList.Count == 1
list.ItemList[0] != null
list.ItemList[0].Str == null

Похоже, MVC3 JsonValueProvider не работает для сложных объектов. Как мне заставить это работать? Нужно ли мне изменить существующий MVC3 JsonValueProvider и исправить его? Если да, то как мне найти его и заменить в проекте MVC3?

Связанные вопросы по StackOverflow, которые я уже безрезультатно ответил:

Asp.net Mvc Ajax Json (post Array) Использует MVC2 и более раннее кодирование на основе форм - этот подход не работает с объектом, который содержит массив объектов (JQuery не может его правильно кодировать).

Отправьте массив сложных объектов с помощью JSON, JQuery в ASP.NET MVC Controller Использует хак, которого я бы хотел избежать, когда контроллер вместо этого получает простую строку, которая затем вручную десериализует себя, а не использует структуру.

MVC3 RC2 JSON Post Binding не работает правильно У него не было заданного типа содержимого - он задан в моем коде.

Как отправить массив сложных объектов с помощью JSON, jQuery в контроллер ASP.NET MVC? Этому бедолаге пришлось написать JsonFilter только для анализа массива. Еще один взлом, которого я бы предпочел избежать.

Итак, как мне это сделать?

65
задан Community 23 May 2017 в 12:24
поделиться