DefaultModelBinder не может десериализовать объект словаря .NET, переданный действию как объект JSON?

У меня очень простой класс:

public class FilterItem
{
    public Dictionary ItemsDictionary { get; set; }

    public FilterItem()
    {
        ItemsDictionary = new Dictionary();
    }
}

Я хочу заполнить данные в словаре на клиенте, а затем передать их в действие моего контроллера как объект JSON . Однако независимо от того, что я пробую на клиенте, DefaultModelBinder, похоже, не может десериализовать его.

Вот пример кода javascript для вызова моего действия:

var simpleDictionary = {"ItemsDictionary": {"1": "5", "2": "7"}};

$.ajax({ cache: false, type: "POST", data: JSON.stringify(simpleDictionary),
contentType: "application/json; charset=utf-8", 
url: "/Catalog7Spikes/GetFilteredProductsJson", success: function (data) {...});

А вот упрощенная версия моего метода действия:

[HttpPost]
public ActionResult GetFilteredProductsJson(FilterItem filterItem)
{   
    ProductsModel productsModel = new ProductsModel();
    return View("SevenSpikes.Nop.UI.Views.Products", productsModel);
}

Обратите внимание, что работает обратное. При передаче как JsonResult объект FilterItem успешно сериализуется и передается клиенту как объект JSON. Однако попытка пойти другим путем не работает.

Я прочитал билет на Connect и подумал, что обходной путь будет работать, но это не работает.

Возможно ли вообще десериализовать словарь .NET, использующий DefaultModelBinder в ASP.NET MVC 3?

6
задан abatishchev 19 March 2012 в 17:54
поделиться