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

时间:2013-10-23 19:04:02

标签: json json.net deserialization json-deserialization

我正在使用JSon.net库反序列化某些对象,它运行正常:

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),在这种情况下,我得到的所有错误是“输入字符串格式不正确”。有没有办法找出哪个字段确实引起了错误?

1 个答案:

答案 0 :(得分:1)

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

Sub Main()
    Dim json As String = "{""Name"":""John"", ""SSN"":""ABC""}"
    JsonConvert.DeserializeObject(json, GetType(Person))
End Sub

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

...我收到了JsonReaderException,其中包含以下消息文字:

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

如果您正在获取Input string was not in a correct format,那么这可能意味着您的JSON字符串出现问题,导致解析器混乱。我在你的问题中注意到你在属性名称和值周围使用单引号而不是双引号。根据规范,这在技术上是无效的JSON(参见JSON.org),可能是造成问题的原因。