2017-11-11 114 views
0

我有一个Dictionary名为finalDictionary,它是通过合并多个字典创建的。 这是一段代码,我用它来创建此词典:将字典作为JSON返回并使用JS函数成功访问它的内容 - C#

Dictionary<string, Dictionary<DateTime, int>> finalDictionary= new Dictionary<string, Dictionary<DateTime, int>>(); 

finalDictionary.Add("Data1", listData1.ToDictionary(x => x.Date, y => y.Value)); 
finalDictionary.Add("Data2", listData2.ToDictionary(x => x.Date, y => y.Value)); 
finalDictionary.Add("Data3", listData3.ToDictionary(x => x.Date, y => y.Value)); 

注:listData1listData2listData3是哪个,我转换成字典在上面的代码中所有的匿名名单。

下面是这些字典的样本格式:(让我们考虑Data1

Key : 'Data1' 
Value : 
     [0] {[6/14/2015 12:00:00 AM, 1]} 
     [1] {[6/21/2015 12:00:00 AM, 0]} 
     [2] {[6/28/2015 12:00:00 AM, 0]} 
     [3] {[7/5/2015 12:00:00 AM, 0]} 
     [4] {[7/12/2015 12:00:00 AM, 0]} 
     [5] {[7/19/2015 12:00:00 AM, 0]} 
     [6] {[7/26/2015 12:00:00 AM, 0]}  

因此,每个上面的日期是再次Key一部分,这些数字Value一部分。

我回到这个字典即finalDictionary的JSON结果从我控制器方法如下:

return Json(new { Result = "OK", Records = obj.GetDetails()}, JsonRequestBehavior.AllowGet); 

但是,当这种返回到我的调用JS阿贾克斯失败抛出下面的内部服务器500错误:

jqXHR = {readyState: 4, getResponseHeader: ƒ, getAllResponseHeaders: ƒ, setRequestHeader: ƒ, overrideMimeType: ƒ, …}, textStatus = "error", errorThrown = "Internal Server Error //and so on 

这里是我的JS代码:

function loadDetails() { 

    $.ajax({ 
     type: 'GET', 
     dataType: 'json', 
     contentType: "application/json; charset=utf-8", 
     cache: false, 
     url: _WebRoot() + '/Charts/GetDetails', 
     success: function (response, textStatus, jqXHR) { 
      prepareData(response.Records, 'Text Title'); 
     }, 
     error: function (jqXHR, textStatus, errorThrown) { 
      alert('Error - ' + errorThrown); 
     } 
    }); 
} 

需要进行哪些修改才能使其工作?

注:我收到上面提到的错误的数据从控制器返回并到达JS方法

+0

也许我偷懒不读代码,但可能有助于因为http状态码500可能是任何东西(引发异常),所以在C#中获得一些实际异常的日志记录。要么或者共享更多的控制器代码,以便我们可以尝试找出它抛出异常的位置。 –

+0

从C#方面来看,没有任何异常,因为字典确实从控制器返回而没有任何错误。我想我正在做一些错误,无论是在返回的JSON格式或我的JS代码端的错误。 –

+0

500错误肯定来自服务器(内部*服务器*错误) - 所以'/等等'部分是你看诊断它。 – James

回答

1

转换的“按键”数据类型(“日期”在我的情况)元件后字符串解决了问题。 最初“日期”为日期时间数据类型

因此,当我从控制器返回我的上述字典作为JSONResult JS方法抛出一个错误,因为它无法字符串化或序列化此字典。

因此建议改变你的字典的键“”元素的数据类型为字符串它们设置为对象

这里的错误消息我是能够调试出(提供此错误消息,因为它可能会帮助谁可能面临这样的类似问题的其他的):

Unhandled Exception: System.ArgumentException: Type 'System.Collections.Generic. Dictionary`2[[System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[ChatData, Test, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]' is not supported for serialization/deserialization of a dictionary, keys must be strings or objects. 
相关问题