首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调试JSON.NET

调试JSON.NET
EN

Stack Overflow用户
提问于 2011-10-18 22:51:16
回答 3查看 10.9K关注 0票数 14

我正在使用JSON.NET反序列化从web服务返回的一些JSON。不幸的是,我得到了以下错误:

JSON数组不能反序列化为'System.Collections.Generic.Dictionary`2System.String,System.String‘类型。

但我不知道如何调试它。有没有办法让它告诉我什么是冒犯的JSON?或者它想把它反序列化到什么程度?不幸的是,这是一个更大的对象层次结构的一部分,所以它不仅仅是一个简单的JSON片段。我试过逐步研究代码,但代码的长度很大,文档也不多。如果它至少能告诉我冒犯的部分,那么我可以看到我是否把我的对象定义或其他东西搞错了。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-10-18 23:24:09

找出了在处理大量代码之后该去哪看。第1118行is是:

代码语言:javascript
复制
          SetPropertyValue(property, reader, newObject);

如果您在那里放置一个断点并查看“属性”,您可以看到哪些属性正在被序列化。因为它是按照json字符串的顺序执行的,所以您可以看到最后一个成功设置的字符串。那么您至少知道序列化程序在哪里失败了。

但是,如果JSON.net在错误中至少提出了属性名,那么这将是有帮助的,但在此之前,这似乎是次好的选择。

票数 5
EN

Stack Overflow用户

发布于 2012-12-02 20:29:24

如果您想反序列化您要从json转换到C#类的内容,那么就需要在json.net中构建一些内容。只需创建一个设置对象并将其传递到反序列化对象调用:

代码语言:javascript
复制
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#类(并将提供有关错误的详细信息)。

希望这能有所帮助。

票数 28
EN

Stack Overflow用户

发布于 2011-10-18 23:15:04

根据您提供的信息,我首先要寻找一个具有字典类型属性的对象。那可能是你的问题课。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7814728

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档