2013-10-23 176 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),並且可能是導致此問題的原因。