我正在使用JSON.NET反序列化从web服务返回的一些JSON。不幸的是,我得到了以下错误:
JSON数组不能反序列化为'System.Collections.Generic.Dictionary`2System.String,System.String‘类型。
但我不知道如何调试它。有没有办法让它告诉我什么是冒犯的JSON?或者它想把它反序列化到什么程度?不幸的是,这是一个更大的对象层次结构的一部分,所以它不仅仅是一个简单的JSON片段。我试过逐步研究代码,但代码的长度很大,文档也不多。如果它至少能告诉我冒犯的部分,那么我可以看到我是否把我的对象定义或其他东西搞错了。
发布于 2011-10-18 23:24:09
找出了在处理大量代码之后该去哪看。第1118行is是:
SetPropertyValue(property, reader, newObject);如果您在那里放置一个断点并查看“属性”,您可以看到哪些属性正在被序列化。因为它是按照json字符串的顺序执行的,所以您可以看到最后一个成功设置的字符串。那么您至少知道序列化程序在哪里失败了。
但是,如果JSON.net在错误中至少提出了属性名,那么这将是有帮助的,但在此之前,这似乎是次好的选择。
发布于 2012-12-02 20:29:24
如果您想反序列化您要从json转换到C#类的内容,那么就需要在json.net中构建一些内容。只需创建一个设置对象并将其传递到反序列化对象调用:
if (!string.IsNullOrEmpty(json))
{
var settings = new JsonSerializerSettings
{
Error = (sender, args) =>
{
if (System.Diagnostics.Debugger.IsAttached)
{
System.Diagnostics.Debugger.Break();
}
}
};
result = JsonConvert.DeserializeObject<T>(json, settings);
}然后,当反序列化过程中出现错误(比如映射错误的C#类-> json对象)时,它将在调试器中中断。检查args对象,您将看到一个名为CurrentObject的属性。这是解析器试图将JSON反序列化为的C#类(并将提供有关错误的详细信息)。
希望这能有所帮助。
发布于 2011-10-18 23:15:04
根据您提供的信息,我首先要寻找一个具有字典类型属性的对象。那可能是你的问题课。
https://stackoverflow.com/questions/7814728
复制相似问题