【发布时间】:2020-05-20 04:57:50
【问题描述】:
我正在从 Web 服务器检索 JSON 响应,并为所有属性创建了强类型类,没有任何问题,除了一个可以是单个字符串值或嵌套数组的属性。
JSON 示例:
"meta_data": [
{
"id": 12772,
"key": "_shipping_phone",
"value": ""
},
{
"id": 12786,
"key": "status",
"value": "completed"
},
{
"id": 12788,
"key": "Payment type",
"value": "instant"
},
{
"id": 12796,
"key": "_transaction_fee",
"value": "0.39"
},
{
"id": 12806,
"key": "connect_destination_normalized",
"value": "1"
},
{
"id": 12807,
"key": "wc_connect_labels",
"value": [
{
"label_id": 1633947,
"tracking": "9400***************",
"refundable_amount": 3.930000000000000159872115546022541821002960205078125,
"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,
"rate": 3.930000000000000159872115546022541821002960205078125,
"currency": "USD",
"expiry_date": 1605051955000,
"label_cached": 1589499962000
},
{
"label_id": 1633942,
"tracking": null,
"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,
"tracking": null,
"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."
}
]
}
如您所见,value 键是一个普通的字符串值(或空白字符串)。但是,最终条目显示的内容可能更多。
这是我的强类型类:
Public Class Meta_Data
Public Property id As Integer
Public Property key As String
'<JsonConverter(GetType(SingleOrArrayConverter(Of Values())))>
Public Property value As Values()
End Class
Public Class 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
End Class
我已经在互联网上搜索了解决方案,但无法提出解决方案。我已经尝试了我找到的不同转换器示例,但没有一个有效,因为它们仍然尝试通过 Values 类传递单个字符串。
这是我的反序列化调用:
Dim info As Order = JsonConvert.DeserializeObject(Of Order)(responseFromServer)
我还有多个其他类,我不打算占用空间来展示,但根类称为Order。
基本上,有没有办法在处理反序列化时检查value,看看它是否是一个字符串,并防止它通过Values类处理?
【问题讨论】: