2016-12-07 32 views
0

我發現了一個錯誤,當我嘗試反序列化JSON字符串:無法反序列化當前JSON陣列(例如1 2 3)代入式

無法反序列化當前JSON陣列(例如[1,2 ,3])...

vb.net代碼:

Public Class DATA 
    Public Property CPU As String 
End Class 

Dim data As DATA = JsonConvert.DeserializeObject(Of DATA)(File.ReadAllText("laptop.json")) 
TextBox25.Text = DATA.CPU 

JSON文件:

[ 
    { 
    "spec": "CPU"; 
    "value": "Intel Core i3-4005U" 
    }; 
    { 
    "spec": "Speed"; 
    "value": "1.7 GHz" 
    }; 
    { 
    "spec": "Cache"; 
    "value": "3MB" 
    }; 
    { 
    "spec": "RAM"; 
    "value": "4GB" 
    }; 
    { 
    "spec": "Warranty Period"; 
    "value": "1 Year" 
    } 
] 

我該如何解決這個錯誤?

+0

首先在JSON每個項目由2個值:「規範」和「價值」,讓你的'Data'類是不完整並向後(CPU是屬性*值*);其次,json包含這些對象中的幾個,這是錯誤信息告訴你的。它還告訴你如何解決錯誤,如果你讀了整個東西 – Plutonix

+0

JSON實際上是無效的:它用分號(';')分隔對象和值而不是逗號(',')。 –

+0

Plutonix:我現在明白了,我刪除了規範和值的所有數據,只有一個規格和一個值的json文件,但同樣的錯誤 –

回答

4

這裏有三個問題。

首先,你已經顯示它的JSON是無效的。 JSON對象中的屬性和JSON數組中的值必須用逗號分隔(,),而不是分號(;)。見JSON.org。第二,你的JSON代表一個數組(或列表)的項目,但是你試圖反序列化成一個類。你需要反序列化到像這樣的列表:

Dim json As String = File.ReadAllText("laptop.json") 
Dim list As List(Of DATA) = JsonConvert.DeserializeObject(Of List(Of DATA))(json) 

第三,你正在使用的DATA類屬性名稱不匹配的數組中的對象的JSON屬性名。類應該像這樣定義來代替:

Class DATA 
    Public Property spec As String 
    Public Property value As String 
End Class 

小提琴:https://dotnetfiddle.net/0aI2C3

相關問題