更新时间:2022-06-26 01:06:22
以下是如何在链接的重复的问题适用于您的用例.
Here is how to get the SingleOrArrayConverter
solution in the linked duplicate question working for your use case.
首先,这是VB转换的转换器代码.将此并保存到项目中某个位置的类文件中.然后,您可以轻松地在以后的任何情况下重用它.
First, here is the VB-translated converter code. Take this and save it to a class file somewhere in your project. You can then easily reuse it for any future cases like this.
Imports Newtonsoft.Json
Imports Newtonsoft.Json.Linq
Public Class SingleOrArrayConverter(Of T)
Inherits JsonConverter
Public Overrides Function CanConvert(objectType As Type) As Boolean
Return objectType = GetType(List(Of T))
End Function
Public Overrides Function ReadJson(reader As JsonReader, objectType As Type, existingValue As Object, serializer As JsonSerializer) As Object
Dim token As JToken = JToken.Load(reader)
If (token.Type = JTokenType.Array) Then
Return token.ToObject(Of List(Of T))()
End If
Return New List(Of T) From {token.ToObject(Of T)()}
End Function
Public Overrides ReadOnly Property CanWrite As Boolean
Get
Return False
End Get
End Property
Public Overrides Sub WriteJson(writer As JsonWriter, value As Object, serializer As JsonSerializer)
Throw New NotImplementedException
End Sub
End Class
现在有了此转换器,只要您拥有一个可以是列表或单个项目的属性,您要做的就是将其声明为类中的列表,然后用SingleOrArrayConverter
类.在您的情况下,看起来像这样:
Now that you have this converter, any time you have a property that can be either a list or a single item, all you have to do is declare it as a list in your class and then annotate that list with a JsonConverter
attribute such that it uses the SingleOrArrayConverter
class. In your case, that would look like this:
Public Class jsonCar
Public Property make As String
Public Property model As String
<JsonConverter(GetType(SingleOrArrayConverter(Of jsonCarLines)))>
Public Property lines As List(Of jsonCarLines)
Public Property year As String
End Class
然后,按照通常的方式反序列化,即可正常使用.
Then, just deserialize as you normally would, and it works as expected.
Dim car As jsonCar = JsonConvert.DeserializeObject(Of jsonCar)(json)
这是一个完整的演示: https://dotnetfiddle.net/msYNeQ
Here is a complete demonstration: https://dotnetfiddle.net/msYNeQ