将 json 字符串反序列化为对象 - Silverlight
本文关键字:对象 Silverlight 反序列化 json 字符串 | 更新日期: 2023-09-27 18:30:44
今天下午我花了很长时间尝试在字符串中实现 JSON 的反序列化,起初我使用的是 DataContractJsonSerializer,因为我的环境是 Silverlight,但它似乎不支持使用开箱即用的字典(在许多其他 SO 问题中提出)。
作为替代方案,我决定暂时使用 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());
但这会导致以下异常:
无法从程序集"System.Core, Version=3.7.0.0, Culture=neutral, PublicKeyToken=969DB8053D3322AC"加载类型"System.Dynamic.IDynamicMetaObjectProvider"。
根据你所看到的,我的方法完全错误,还是我只是犯了一个小学生的错误(或两者兼而有之!
谢谢你的时间!
我认为这会对你有所帮助:
JavaScriptSerializer ser = new JavaScriptSerializer();
ExchangeData foo = ser.Deserialize<ExchangeData>(args.Result);
我不太确定你需要使用StreamReader,你到底用什么?
顺便说一下,我假设args.Result
是 json 字符串。
异常消息本身似乎是此 SO 问题中提出的已知问题:
迁移到 JSON.NET 4.0.3 破坏了我的应用程序
使用 Nuget 安装具有所有必要依赖项的最新包后(我手动下载了 .以前来自 CodePlex 项目的 DLL)代码无需进行其他更改即可工作。
感谢提供解决方案的用户。
根据您的例外:(一个简单的谷歌搜索拉出了这个答案)
您的项目似乎引用了旧版本的 Silverlight 运行时。
若要进行检查,请在 Visual Studio 中调出项目属性,并确保 Silverlight 版本设置为 4.0。
您可能还需要仔细检查 System.Windows.Controls.Navigation 程序集,确保它引用的最新版本通常位于 [程序文件]''Microsoft SDKs''Silverlight''v4.0''Libraries''Client''System.Windows.Controls.Navigation.dll
以及以下内容:
"rates": {
"AED": 3.6732,
"AFN": 48.400002,
"ALL": 106.669998,
}
不是在 JSON 中,它是一个数组,它是一个对象。 数组如下所示:
"rates": [
"AED": 3.6732,
"AFN": 48.400002,
"ALL": 106.669998,
]
因此,要么您必须让源代码正确格式化其 JSON,要么需要手动设置此特定片段的反序列化以填充字典。