Debugging JSON.NET

本文关键字:NET JSON Debugging | 更新日期: 2023-09-27 18:11:33

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

无法将JSON数组反序列化为类型system . string) system . string,‘System.Collections.Generic.Dictionary 2[’。

但我不知道如何调试它。有没有办法让它告诉我违规的JSON是什么?或者它想要反序列化成什么?不幸的是,这是一个更大的对象层次结构的一部分,所以它不仅仅是一个简单的JSON。我试过逐步执行代码,但是代码很长,文档很少。如果它至少可以告诉我错误的部分,那么我可以看看是否我搞砸了我的对象定义或其他。

Debugging JSON.NET

如果你想反序列化你从json转换到c#类的东西json。net中有一些内置的东西。只需创建一个settings对象并将其传递给deserializeobject调用:

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#类(并将提供有关错误可能是什么的详细信息)。

希望对你有帮助。

在浏览了大量代码后,找到了该看的地方。JsonSerializerInternalReader是:

          SetPropertyValue(property, reader, newObject);

,如果你在那里放一个断点,观察"property"你可以看到哪个属性被序列化了。因为它是按照json字符串的顺序来做的,你可以看到最后一个成功设置的。这样至少可以知道序列化器在哪里出错了。

如果JSON.net在错误中至少提出了属性名,这将是有帮助的,但是在这种情况发生之前,这似乎是下一个最好的事情。

根据您提供的信息,我将首先查找具有Dictionary类型属性的对象。