Imports System.Collections.Generic
Imports Newtonsoft.Json.Linq
" ""key"": ""_shipping_phone""," +
" ""key"": ""status""," +
" ""value"": ""completed""" +
" ""key"": ""Payment type""," +
" ""value"": ""instant""" +
" ""key"": ""_transaction_fee""," +
" ""key"": ""connect_destination_normalized""," +
" ""key"": ""wc_connect_labels""," +
" ""label_id"": 1633947," +
" ""tracking"": ""9400***************""," +
" ""refundable_amount"": 3.93," +
" ""created"": 1589499950667," +
" ""carrier_id"": ""usps""," +
" ""service_name"": ""USPS - First Class Mail""," +
" ""status"": ""PURCHASED""," +
" ""package_name"": ""Bubble Mailer""," +
" ""product_names"": [" +
" ""Peace Love And Wine Sub Tshirt""" +
" ""receipt_item_id"": 60476008," +
" ""created_date"": 1589499955000," +
" ""main_receipt_id"": 46201718," +
" ""currency"": ""USD""," +
" ""expiry_date"": 1605051955000," +
" ""label_cached"": 1589499962000" +
" ""label_id"": 1633942," +
" ""refundable_amount"": 0," +
" ""created"": 1589499912741," +
" ""carrier_id"": null," +
" ""service_name"": ""USPS - First Class Mail""," +
" ""status"": ""PURCHASE_ERROR""," +
" ""package_name"": ""Bubble Mailer""," +
" ""product_names"": [" +
" ""Peace Love And Wine Sub Tshirt""" +
" ""receipt_item_id"": -1," +
" ""created_date"": 1589499912000," +
" ""error"": ""The transaction was declined.""" +
" ""label_id"": 1633913," +
" ""refundable_amount"": 0," +
" ""created"": 1589499712367," +
" ""carrier_id"": null," +
" ""service_name"": ""USPS - First Class Mail""," +
" ""status"": ""PURCHASE_ERROR""," +
" ""package_name"": ""Bubble Mailer""," +
" ""product_names"": [" +
" ""Peace Love And Wine Sub Tshirt""" +
" ""receipt_item_id"": -1," +
" ""created_date"": 1589499712000," +
" ""error"": ""The transaction was declined.""" +
Dim root As Order = JsonConvert.DeserializeObject(Of Order)(json)
For Each item As BaseMetaData In root.meta_data
If item.GetType() = GetType(StringMetaData) Then
Console.WriteLine(String.Format("{0} {1}: {2}", CStr(item.id), item.key, DirectCast(item, StringMetaData).value))
Console.WriteLine(String.Format("{0} {1}:", CStr(item.id), item.key))
For Each complex As Values In DirectCast(item, ComplexMetaData).value
Console.WriteLine(" label_id: " + CStr(complex.label_id))
Console.WriteLine(" status: " + complex.status)
Console.WriteLine(" rate: " + CStr(complex.rate))
Public Property meta_data As List(Of BaseMetaData)
<JsonConverter(GetType(MetaDataConverter))>
Public Class BaseMetaData
Public Property id As Integer
Public Property key As String
Public Class StringMetaData
Public Property value As String
Public Class ComplexMetaData
Public Property value As List(Of Values)
Public Property label_id As Integer
Public Property tracking As String
Public Property refundable_amount As String
Public Property created As String
Public Property carrier_id As String
Public Property service_name As String
Public Property status As String
Public Property package_name As String
Public Property product_names As String()
Public Property receipt_item_id As String
Public Property created_date As String
Public Property [error] As String
Public Property main_receipt_id As String
Public Property rate As String
Public Property currency As String
Public Property expiry_date As String
Public Property label_cached As String
Public Class MetaDataConverter
Public Overrides Function CanConvert(objectType As Type) As Boolean
Return GetType(BaseMetaData).IsAssignableFrom(objectType)
Public Overrides Function ReadJson(reader As JsonReader, objectType As Type, existingValue As Object, serializer As JsonSerializer) As Object
Dim jo As JObject = JObject.Load(reader)
Dim val As JToken = jo("value")
If val.Type = JTokenType.Array Then
meta = New ComplexMetaData()
meta = New StringMetaData()
serializer.Populate(jo.CreateReader(), meta)
Public Overrides ReadOnly Property CanWrite As Boolean
Public Overrides Sub WriteJson(writer As JsonWriter, value As Object, serializer As JsonSerializer)
Throw New NotImplementedException()