当我尝试在Ajax中反序列化此Dictionary时,我有这个方法将Dictionary作为JsonResult返回我收到此错误:
这是我在MVC中的方法:
[HttpPost]
public JsonResult GetCalculateAmortizationSchedule()
{
var data =.....
var httpClient = new HttpClient();
var response = httpClient.PostAsJsonAsync("http://localhost:62815/v1/APR/CalculateAmortizationSchedule", data).Result;
var returnValue = response.Content.ReadAsAsync<Dictionary<int, AmItem>>().Result;
return Json(returnValue);
}
这是错误:
键入&#39; System.Collections.Generic.Dictionary`2 [[System.Int32,mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089],[ConnectionMappingSample.Models.AmItem,ConnectionMappingSample,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null]]&#39;字典的序列化/反序列化不支持,键必须是字符串或对象。
答案 0 :(得分:10)
这是你的字典:Dictionary<int, AmItem>
这是您的词典应该是:Dictionary<string, AmItem>
答案 1 :(得分:0)
我有同样的错误,但我发现它有点奇怪......为什么Javascript不支持整数作为字典的键?
所以我的解决方案是在反序列化之前将字典转换为列表。
如果 dict
是你的字典:
var JSdict = @Html.Raw(Json.Encode(dict.ToList()));