DefaultModelBinder无法反序列化作为JSON对象传递给操作的.NET Dictionary对象?

mil*_*lin 6 c# json defaultmodelbinder deserialization asp.net-mvc-3

我有一个非常简单的课程:

public class FilterItem
{
    public Dictionary<string, string> ItemsDictionary { get; set; }

    public FilterItem()
    {
        ItemsDictionary = new Dictionary<string, string>();
    }
}
Run Code Online (Sandbox Code Playgroud)

我想在客户端上填充字典中的数据,然后将其作为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) {...});
Run Code Online (Sandbox Code Playgroud)

这是我的动作方法的简化版本:

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

请注意,相反的工作.当作为JsonResult传递时,FilterItem对象被成功序列化并作为JSON对象传递给客户端.然而,尝试反过来却行不通.

我读了关于Connect的票,并认为解决方法可行,但事实并非如此.

是否有可能使用ASP.NET MVC 3中的DefaultModelBinder反序列化.NET字典?

Kei*_*ith 0

您尝试过以下方法吗?

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

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