Я ищу решение для размещения массива объектов в MVC3 через JSON.
Пример кода, над которым я работаю:
http://weblogs.asp.net/scottgu/archive/2010/07/27/introducing-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<ItemViewModel> 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 содержит один элемент, как и должно быть
Элемент в этом ItemList не инициализирован. Str - ноль, а Enabled - ложь.
Другими словами, это то, что я получаю из привязки модели 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 не работает для сложных объектов. Как мне заставить это работать? Нужно ли мне модифицировать существующий JC-файл MVC3 JsonValueProvider и исправить его? Если да, то как мне получить его и заменить в проекте MVC3?
Связанные вопросы StackOverflow, которые я уже преследовал безрезультатно:
Asp.net Mvc Ajax Json (post Array)
Использует MVC2 и более старую кодировку на основе форм - этот подход не работает с объектом, который содержит массив объектов (JQuery не может правильно его кодировать).
Отправка массива сложных объектов с помощью JSON, JQuery в ASP.NET MVC Controller
Использует хак, который я бы хотел избежать, когда Контроллер вместо этого получает простую строку, которую он затем сам десериализует, а не используя каркас.
Привязка сообщения MVC3 RC2 JSON работает неправильно
Не установлен его тип контента - он установлен в моем коде.
Как опубликовать массив сложных объектов с помощью JSON, jQuery в ASP.NET MVC Controller?
Этот бедняга должен был написать JsonFilter только для разбора массива. Еще один взлом, который я бы предпочел избежать.
Итак, как мне это сделать?