2017-11-11 10 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. 
相關問題