2016-12-07 30 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

相关问题