私は ASP.NET で VB を使用しています。以下の JSON を約 4 日間逆シリアル化しようとしていますが、成功していません。
問題は、以下のコードが null 値を返すことです。各製品の価格と送料の値を含む、宣言した各クラス メンバーの JSON の結果を取得したいと考えています。
誰かが私を正しい方向に向けることができますか
1.) null 値が返される理由と
2.) 宣言したクラスが、逆シリアル化しようとしている json に対して有効な場合は?
どんな助けでも大歓迎です!
以下は、私が使用している JSON の例です。
{
"kind": "shopping#products",
"items":
[{
"kind": "shopping#product",
"id": "tag:google.com,2010:shopping/products/8040/8382012077897342942",
"product": {
"googleId": "8382012077897342942",
"title": "LEGO Star Wars™: Jabba's Palace™ (9516)",
"description": "Rescue Han Solo from Jabba the Hutt's desert palace!",
"inventories": [
{
"price": 119.99,
"shipping": 12.95,
"currency": "USD"
}
]
}
}
]
}
これが私が現在持っているコードです:
Imports System.Web.Script.Serialization
Imports Newtonsoft.Json.Linq
Public Class inventories
Public Property price As Double
Public Property shipping As Double
End Class
Public Class product
Public Property googleid As String
Public Property title As String
Public Inventories As inventories()
End Class
Public Class Items
Public Property product As product()
Public Property kind As String
Public Property id As String
End Class
Partial Class JSON_Test
Inherits System.Web.UI.Page
Protected Sub getbutton_Click(sender As Object, e As System.EventArgs) Handles getbutton.Click
' 1. Get JSON string from Google
Dim google_json_string As String
google_json_string = json_text.Text
'2. Deserialize JSON - Method 1
Dim jss As New JavaScriptSerializer
Dim ds_results = jss.Deserialize(Of List(Of Items))(google_json_string)
result1.Text = ds_results.Count
result2.Text = ds_results(0).kind
End Sub
End Class
(更新) 次のような構造のクラスを含めるようにコードを更新しました (ありがとう、Dan-o):
Public Class g_JSON
Public Property items As List(Of Items)
End Class
Public Class Items
Public Property product As product()
Public Property kind As String
Public Property id As String
End Class
Public Class product
Public Property googleid As String
Public Property title As String
Public Inventories As inventories()
End Class
Public Class inventories
Public Property price As Double
Public Property shipping As Double
End Class
また、コードを次のように更新しました。
Partial Class JSON_Test
Inherits System.Web.UI.Page
Protected Sub getbutton_Click(sender As Object, e As System.EventArgs) Handles getbutton.Click
' 1. Get JSON string from Google
Dim google_json_string As String
google_json_string = json_text.Text
'2. Deserialize JSON - Method 1
Dim jss As New JavaScriptSerializer
Dim ds_results = jss.Deserialize(Of g_JSON)(google_json_string)
result1.Text = ds_results.items(0).id
result2.Text = ds_results.items(0).kind
End Sub
End Class
これで、コードは問題なくコンパイルされますが、クリック イベントを開始すると、次のエラーが発生します。
'product[]' の型に対して定義されたパラメーターなしのコンストラクターがありません。
説明: 現在の Web 要求の実行中に未処理の例外が発生しました。エラーの詳細とコード内のどこでエラーが発生したかについては、スタック トレースを確認してください。
例外の詳細: System.MissingMethodException: 'product[]' の型に対して定義されたパラメーターなしのコンストラクターがありません。
ソース エラー: 38 行目: Dim ds_results = jss.Deserialize(Of g_JSON)(google_json_string)
これはどういう意味ですか? product() のパラメーターなしのコンストラクターを作成するにはどうすればよいですか?
ご覧いただきありがとうございます。