Dictionary is not supported for serialization/deserialization of a dictionary, keys must be strings or objects

Viewed 11478

I have this method that is returning Dictionary as a JsonResult when I try to deserialize this Dictionary in Ajax I am getting this error:

This is my method in 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);
}

This is error:

Type '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]]' is not supported for serialization/deserialization of a dictionary, keys must be strings or objects.

2 Answers

I had the same error, but I found it to be a bit strange... Why wouldn't Javascript support integers as keys for dictionaries right?

So my solution was to just transform the dictionary into a list before deserialization.

If dict is your dictionary:

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