我今天下午花了很长时间尝试在字符串中实现JSON的反序列化,起初我使用的是DataContractJsonSerializer,因为我的环境是Silverlight,但它似乎并不支持使用字典开箱即用(引发了许多其他SO问题)。将json字符串反序列化为一个对象Silverlight
作为一种选择,我决定暂时使用JSON.NET(基于上述SO问题的答案),并且遇到以下问题。
我想反序列化下面的JSON:
{
"disclaimer": "This data is collected from various providers and provided free of charge for informational purposes only, with no guarantee whatsoever of accuracy, validity, availability or fitness for any purpose; use at your own risk. Other than that - have fun, and please share/watch/fork if you think data like this should be free!",
"license": "Data collected from various providers with public-facing APIs; copyright may apply; not for resale; no warranties given.",
"timestamp": 1334183999,
"base": "USD",
"rates": {
"AED": 3.6732,
"AFN": 48.400002,
"ALL": 106.669998,
}
}
,并把它下面的对象(字典中的双重要求)中:在实际上得到这个
public class ExchangeData
{
public string disclaimer { get; set; }
public string license { get; set; }
public string timestamp { get; set; }
public string @base { get; set; }
public Dictionary<string, double> rates { get; set; }
}
我的最新尝试工作如下:
StreamReader reader = new StreamReader(args.Result);
ExchangeData data = JsonConvert.DeserializeObject<ExchangeData>(reader.ReadToEnd());
但是,这导致下面的例外on:
无法从程序集“System.Core,Version = 3.7.0.0,Culture = neutral,PublicKeyToken = 969DB8053D3322AC'中加载类型'System.Dynamic.IDynamicMetaObjectProvider'。
根据你看到的是我的做法完全错误还是我只是让一个学生的错误(或两者)
感谢您的时间!
从我所了解的JavaScriptSerializer在Silverlight中不可用(正如我的问题中提到的),这就是为什么在使用JSON.NET时 - 如果有任何替代方法,我愿意接受。另外args.Result是一个Stream。 – 2012-04-12 00:02:04