字典的序列化/反序列化不支持字典,键必须是字符串或对象

时间:2017-05-23 16:01:40

标签: c# .net dictionary serialization

当我尝试在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;字典的序列化/反序列化不支持,键必须是字符串或对象。

2 个答案:

答案 0 :(得分:10)

这是你的字典:Dictionary<int, AmItem>

这是您的词典应该是:Dictionary<string, AmItem>

答案 1 :(得分:0)

我有同样的错误,但我发现它有点奇怪......为什么Javascript不支持整数作为字典的键?

所以我的解决方案是在反序列化之前将字典转换为列表

如果 dict 是你的字典:

var JSdict = @Html.Raw(Json.Encode(dict.ToList()));