无法将当前JSON数组(例如1 2 3)反序列化为类型

Ash*_*ody 0 vb.net json.net

我尝试反序列化JSON字符串时收到错误:

无法反序列化当前的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
Run Code Online (Sandbox Code Playgroud)

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"
  }
]
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个错误?

Bri*_*ers 5

这里有三个问题.

首先,您所显示的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)
Run Code Online (Sandbox Code Playgroud)

第三,DATA您使用的类中的属性名称与数组中对象的JSON属性名称不匹配.该类应该像这样定义:

Class DATA
    Public Property spec As String
    Public Property value As String
End Class
Run Code Online (Sandbox Code Playgroud)

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