gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 21:41:29 25 4
gpt4 key购买 nike

我有一个非常简单的类:

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

public FilterItem()
{
ItemsDictionary = new Dictionary<string, string>();
}
}

我想在客户端的字典中填充数据,然后将其作为 JSON 对象传递给我的 Controller 操作。但是,无论我在客户端上尝试什么,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 对象传递给客户端。然而,尝试反过来行不通。

我读了the ticket on Connect并认为变通办法会奏效,但事实并非如此。

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

最佳答案

Hanselman 谈到了这个:

来源: http://www.hanselman.com/blog/ASPNETWireFormatForModelBindingToArraysListsCollectionsDictionaries.aspx

DefaultModelBinder 需要一些不太理想的字典语法。尝试使用这种语法:

 {
"dictionary[0]":{"Key":"a", "Value":"b"},
"dictionary[1]":{"Key":"b", "Value":"b"}
}

它有点笨重,但很结实。以下也可以,但我个人更喜欢上面的;它更短。

 {
"dictionary[0].Key":"a",
"dictionary[0].Value":"b",
"dictionary[1].Key":"b"
"dictionary[1].Value":"b"
}

关于c# - DefaultModelBinder 无法反序列化作为 JSON 对象传递给操作的 .NET Dictionary 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7042919/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com