問題

JSON Stringをvb.netのObjectに適切に解析する方法は?私のJSONデータは[]このブラケットを持っているので、配列としてカウントされていると思いますか?私は別のアプリケーションがそのJSONを消費しているので、私のJSONデータを変更することはできません。

私のJSONがどのように見えるかは次のとおりです。

 [
  {
    "Id": "WEB1853257",
    "Tgl_OPJ": "2018-10-31T08:32:14.223Z",
    "Tgl_Jth_Tempo": "2018-11-07T08:25:14.436Z",
    "Nm_Plg": "PURWACOKRO",
    "Nm_Slsman": "BURHAN",
    "Ket": "BARU",
    "Divisi": "IPHONE X"
  },
  {
    "Id": "WEB1853240",
    "Tgl_OPJ": "2018-10-30T16:41:30.393Z",
    "Tgl_Jth_Tempo": "2018-11-06T23:59:00.000Z",
    "Nm_Plg": "PURWACOKRO",
    "Nm_Slsman": "BURHAN",
    "Ket": "SEKEN",
    "Divisi": "IPHONE X"
  },
  {
    "Id": "WEB1853238",
    "Tgl_OPJ": "2018-10-30T16:28:43.416Z",
    "Tgl_Jth_Tempo": "2018-11-06T23:59:00.000Z",
    "Nm_Plg": "PURWACOKRO",
    "Nm_Slsman": "BURHAN",
    "Ket": "SEKEN",
    "Divisi": "IPHONE XS"
  }
]
 

ここに私のvb.netコードです:

 Imports System.Net
Imports Newtonsoft.Json
Imports Newtonsoft.Json.Linq

Public Class Form1
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        Dim url As String = String.Format("http://localhost:5000/phoneOrderList")

        Dim serviceRequest As New WebClient
        Dim response As String = serviceRequest.DownloadString(New Uri(url))

        Dim a As PhoneOrderList = JsonConvert.DeserializeObject(Of PhoneOrderList)(response)
        MessageBox.Show(a.Nm_Plg)

    End Sub
End Class

Public Class PhoneOrderList
    Public Property Id As String
    Public Property Tgl_OPJ As String
    Public Property Tgl_Jth_Tempo As String
    Public Property Nm_Plg As String
    Public Property Nm_Slsman As String
    Public Property Ket As String
    Public Property Divisi As String
End Class
 

ボタンをクリックすると、次のようなエラーが表示されます。

Newtonsoft.Json.JsonSerializationException: 'デシリアライズできません 現在のJSON配列([1,2,3]など)を 'WindowsApp2.OPJList'型に変換します。 型にはJSONオブジェクト({"name": "value"}など)が必要です。 正しく逆シリアル化されます。このエラーを修正するには、JSONを JSONオブジェクト(例:{"name": "value"})またはdeserialized型を コレクションインタフェースを実装する配列あるいは型 (例えば JSONからdeserializedできるListのようなICollection、IList) 配列。 JsonArrayAttributeを強制的に型に追加することもできます JSON配列から逆シリアル化します。パス "、行1、位置1'。

私はすでにリストとして配列型に変更しています。

  ベストアンサー

単一のPhoneOrderListオブジェクトではなく、JSONをPhoneOrderListのListに変換する必要があります。そう...

 Dim a = JsonConvert.DeserializeObject(Of List(Of PhoneOrderList))(response)
 

JSONをPhoneOrderListオブジェクトのリストに正しく変換します。上記のJSONでは、a.Countが3、a(0).Idが "WEB1853257"、a(1).Idは "WEB1853240"などとなります。

  同じタグがついた質問を見る

arraysjsonvb.netlistarraylist