2016-03-02 53 views
-2

非常簡單的問題。希望它容易...將字典<int, string>轉換成Json

Dictionary<int, string> dict = PLCCommunicator.getVarForSchakelingen("iOffsetSun", plc); 
return Json(new { succeeded = true, dict }, JsonRequestBehavior.AllowGet); 

有沒有一種方法可以輕鬆地轉換字典?像dict.ToJson()

我控制器東西返回JsonResult ...

+0

這個問題ISN沒有很好的研究。 Google是你的朋友。此問題與[此帖子]類似(http://stackoverflow.com/questions/4861138/c-sharp-json-serialization-of-dictionary-into-keyvalue-instead-of-keyk)。和[本文](http://stackoverflow.com/questions/32006310/serialize-and-deserialize-dictionaryint-object-using-javascriptserializer-and)和[本文](http://stackoverflow.com/questions/ 10197059 /串行化-dictionaryint-對象使用JSON的網)。你明白了。 – franklin

+0

我發現了一些自己(不是全部,所以非常感謝!),但它仍然涉及編碼和測試代碼。我希望有一個圖書館爲我做... –

回答

0

您可以使用JsonConvert類擴展方法:

public static class DictionaryExtensions 
{ 
    public static string ToJson<TKey, TValue>(this Dictionary<TKey, TValue> dictionary) 
    { 
     return JsonConvert.SerializeObject(dictionary); 
    } 
} 

然後,你可以這樣做:

Dictionary<int, string> dict = PLCCommunicator.getVarForSchakelingen("iOffsetSun", plc); 
return Json(new { succeeded = true, jsonDict = dict.ToJson() }, JsonRequestBehavior.AllowGet); 
+0

謝謝,我還發現'JsonConvert.SerializeObject(dict);'我也在考慮製作一個包裝類而不是使用字典,因爲它更容易客戶端解析一個封裝序列化爲json而不是序列化爲json的字典。我沒有這麼經驗......任何有關這方面的建議/意見,歡迎... –

+0

@Kipei:你可以在服務器端使用字典,並在客戶端使用包裝,因爲JSON是相同的,但在你的情況你使用數字作爲關鍵,所以包裝不是一個選項。如果使用一類字典,哪些選項更好,取決於數據的動態性。如果你有明確的信息發送然後使用模型。如果你不知道什麼信息將被髮送,直到運行時,然後使用一個字典 –