2013-10-23 148 views
0

我使用JSon.net库反序列化的一些对象时获得详细的错误,它工作正常:如何反序列化JSON

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

你使用的是什么版本的Json.Net?当我用v5.0.8(最新版)进行尝试时,我得到'无法将字符串转换为整数:ABC。路径'SSN',第1行,第27位。这似乎对我来说非常特殊。你的JSON字符串格式是否正确? –

+1

顺便说一句,'Dim json = {'Name':'John','SSN':'ABC'}'不能在VB中编译。我假设你的意思是'Dim json As String =“{'Name':'John','SSN':'ABC'}”'。另外,从技术上讲,单引号应该是双引号才是正确的JSON。参见[json.org](http://json.org/)。 –

+0

@BrianRogers你是正确的双引号,我改变格式后双引号JSON它开始报告详细的错误。 – Dan

回答

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),并且可能是导致此问题的原因。