JavaScriptSerializer.Deserialize()到字典中

我试图在Json中解析Open Exchange Rates JSON ,我正在使用这种方法:

HttpWebRequest webRequest = GetWebRequest("http://openexchangerates.org/latest.json"); HttpWebResponse response = (HttpWebResponse)webRequest.GetResponse(); string jsonResponse = string.Empty; using (StreamReader sr = new StreamReader(response.GetResponseStream())) { jsonResponse = sr.ReadToEnd(); } var serializer = new JavaScriptSerializer(); CurrencyRateResponse rateResponse = serializer.Deserialize(jsonResponse); 

如果我理解JavaScriptSerializer.Deserialize正确我需要定义和对象将Json转换为。

我可以使用这样的数据类型成功地序列化它:

 public class CurrencyRateResponse { public string disclaimer { get; set; } public string license { get; set; } public string timestamp { get; set; } public string basePrice { get; set; } public CurrencyRates rates { get; set; } } public class CurrencyRates { public string AED { get; set; } public string AFN { get; set; } public string ALL { get; set; } public string AMD { get; set; } } 

我希望能够用以下内容重播“CurrencyRates汇率”:

 public Dictionary rateDictionary { get; set; } 

但是解析器总是将rateDictionary返回为null。 知道这是否可行,或者你有更好的解决方案吗?

编辑: Json看起来像这样:

 { "disclaimer": "this is the disclaimer", "license": "Data collected from various providers with public-facing APIs", "timestamp": 1328880864, "base": "USD", "rates": { "AED": 3.6731, "AFN": 49.200001, "ALL": 105.589996, "AMD": 388.690002, "ANG": 1.79 } } 

此代码适用于您的示例数据

 public class CurrencyRateResponse { public string disclaimer { get; set; } public string license { get; set; } public string timestamp { get; set; } public string @base { get; set; } public Dictionary rates { get; set; } } JavaScriptSerializer ser = new JavaScriptSerializer(); var obj = ser.Deserialize(json); var rate = obj.rates["AMD"]; 

如果你的json是这样的:

 {"key":1,"key2":2,...} 

那么你应该能够做到:

 Dictionary rateDict = serializer.Deserialize>(json); 

这编译:

 string json = "{\"key\":1,\"key2\":2}"; var ser = new System.Web.Script.Serialization.JavaScriptSerializer(); var dict = ser.Deserialize>(json); 

你应该能够从这里自己弄清楚。

  Below code will work fine, CurrencyRates is collection so that by using List we can take all reates. This should work!! public class CurrencyRateResponse { public string disclaimer { get; set; } public string license { get; set; } public string timestamp { get; set; } public string basePrice { get; set; } public List rates { get; set; } } public class CurrencyRates { public string AED { get; set; } public string AFN { get; set; } public string ALL { get; set; } public string AMD { get; set; } } JavaScriptSerializer ser = new JavaScriptSerializer(); var obj = ser.Deserialize(json); var rate = obj.rates["AMD"];