Как описано, вам нужно добавить класс, который обрабатывает вложенные Rules
объекты.
В вашей исходной структуре класса класс Rules
не имеет rules
Свойство, которое может содержать второй уровень вложенности.
Но вам также нужно обрабатывать неопределенный уровень вложенности, поскольку другие вложенные классы могут иметь дополнительный вложенный Rules
объект.
Вы можете добавить новый класс, который обрабатывает этот тип вложений, ссылаясь на себя:
Partial Public Class RulesList
Public Id As String
Public Value As Long()
'(...)
Public Rules As RulesList()
End Class
Кроме того, он должен содержать массив / список Value
объекты.
Обратите внимание, что я использовал Массивы вместо Списки : просто проверить результаты проще, вы можете использовать List(Of [Type])
, есливы предпочитаете, окончательный результат не меняется.
Этот пример класса (с именем Queries
) реализует такую структуру.
Он также включает в себя сериализацию и десериализацию (упрощенно, без проверки и обработки ошибок)как static
(shared
) методы.
Предположим, jsonInput
- это ваш объект JSON:
Десериализация в List(Of QueryBuilder)
:
Dim myQueries = Queries.Deserialize(jsonInput)
Сериализацияa List(Of QueryBuilder)
обратно к исходному объекту JSON.
Обратите внимание, используя визуализатор JSON в Visual Studio, что структура воспроизводится точно так же, как и оригинал:
Dim jsonOutput = Queries.Serialize(myQueries)
Queries
класс:
Imports Newtonsoft.Json
Public Class Queries
Public Class QueryBuilder
Public Condition As String
Public Rules As Rules()
Public Valid As Boolean
End Class
Public Class Rules
Public Id As String
Public Field As String
<JsonProperty("type")>
Public QueryType As String
Public Input As String
<JsonProperty("operator")>
Public QueryOperator As String
Public Value As String
Public Condition As String
Public Rules As RulesList()
End Class
Partial Public Class RulesList
Public Id As String
Public Field As String
<JsonProperty("type")>
Public QueryType As String
Public Input As String
<JsonProperty("operator")>
Public QueryOperator As String
Public Value As Long()
Public Condition As String
Public Rules As RulesList()
End Class
Public Shared Function Deserialize(jsonSource As String) As List(Of QueryBuilder)
Return JsonConvert.DeserializeObject(Of List(Of QueryBuilder))(jsonSource)
End Function
Public Shared Function Serialize(classObject As List(Of QueryBuilder)) As String
Return JsonConvert.SerializeObject(classObject)
End Function
End Class