反序列化JSon时如何获取详细错误

反序列化JSon时如何获取详细错误,json,json.net,deserialization,json-deserialization,Json,Json.net,Deserialization,Json Deserialization,我正在使用库对一些对象进行反序列化,效果很好: Public Class Person Public Property PersonId As Long Public Property Name As String Public Property SSN As Integer End Class Dim json = {'Name':'John', 'SSN':'ABC'} JsonConvert.DeserializeObject(json, GetType(Person))

我正在使用库对一些对象进行反序列化,效果很好:

Public Class Person
  Public Property PersonId As Long
  Public Property Name As String
  Public Property SSN As Integer
End Class

Dim json = {'Name':'John', 'SSN':'ABC'}

JsonConvert.DeserializeObject(json, GetType(Person))

然而,在我的例子中,json可能包含无效数据(如上面的SSN),在这种情况下,我得到的错误是“输入字符串的格式不正确”。有没有办法找出到底是哪个字段引发了错误?

如果json的格式正确,那么json.Net如果无法转换值,应该报告详细的错误。我使用5.0.8版(NuGet中提供的最新版本)使用以下代码进行了尝试:

…我得到了一个带有以下消息文本的
JsonReaderException

Could not convert string to integer: ABC. Path 'SSN', line 1, position 27.

如果您得到的
输入字符串格式不正确
,则可能意味着您的JSON字符串有问题,使解析器感到困惑。我注意到在您的问题中,您在属性名称和值周围使用单引号,而不是双引号。根据规范,这在技术上是无效的JSON(请参阅),可能是导致问题的原因

您使用的是Json.Net的哪个版本?当我在v5.0.8(最新版本)上试用时,我发现
无法将字符串转换为整数:ABC。路径“SSN”,第1行,位置27。
这对我来说似乎非常具体。您的JSON字符串格式是否正确?顺便问一下,
Dim JSON={'Name':'John',SSN':'ABC'}
在VB中无法编译。我猜您的意思是
Dim json As String=“{'Name':'John','SSN':'ABC'}”
。另外,从技术上讲,单引号应该是双引号才能正确使用JSON。请参阅。@BrianRogers您对双引号的看法是正确的,在我将格式更改为双引号JSON后,它开始报告详细错误。@BrianRogers为什么不将您的评论作为答案发布,以便我可以接受?很高兴听到更改引号解决了您的问题。我把它贴出来作为你的答案。
Could not convert string to integer: ABC. Path 'SSN', line 1, position 27.