[英]Deserializing JSON nested arrays
我有一個JSON
字符串,我試圖將其反序列化為 .Net 對象。
該代碼有效,直到它遇到嵌套數組。 然后它只返回空值。
在下面的例子中,當我調試和查看處理過的對象時,它只會有:
規則:
0: Will contain all data for the first node (project_number)
1: Will contain all data for the second node (agreement_number)
2: All fields will be Nothing
Condition: AND
Valid: true
如何反序列化整個對象? 請注意, JSON
字符串來自一個庫 ( https://querybuilder.js.org/
),所以我對如何創建字符串猶豫不決。
這是我的代碼:
Dim TestObj = JsonConvert.DeserializeObject(Of List(Of JsonObject))(TestString)
<Serializable()>
Public Class JsonObject
Public Property condition As String
Public Property Rules As List(Of Rules)
Public Property valid As Boolean
End Class
<Serializable()>
Public Class Rules
Public Property id As String
Public Property field As String
Public Property type As String
Public Property input As String
Public Property [operator] As String
Public Property value As String
End Class
Public Property TestString As String = "[
{
'condition':'AND',
'rules':[
{
'id':'project_number',
'field':'project_number',
'type':'string',
'input':'text',
'operator':'equal',
'value':'dfgdfs'
},
{
'id':'agreement_number',
'field':'agreement_number',
'type':'string',
'input':'text',
'operator':'contains',
'value':'asdfas'
},
{
'condition':'AND',
'rules':[
{
'id':'division',
'field':'division',
'type':'string',
'input':'select',
'operator':'in',
'value':[
'0',
'11719'
]
},
{
'condition':'AND',
'rules':[
{
'id':'ta',
'field':'ta',
'type':'string',
'input':'select',
'operator':'in',
'value':[
'24740',
'24744'
]
}
]
}
]
}
],
'valid':true
}]"
如上所述,您需要添加一個處理嵌套Rules
對象的類。
在您的原始類結構中, Rules
類沒有可以容納第二級嵌套的rules
屬性。
但是您還需要處理未確定級別的嵌套,因為其他嵌套類可以具有進一步嵌套的Rules
對象。
您可以通過引用自身來添加處理這種嵌套的新類:
Partial Public Class RulesList
Public Id As String
Public Value As Long()
'(...)
Public Rules As RulesList()
End Class
另外,它必須包含一個數組/ Value
對象列表。
請注意,我使用了Arrays而不是Lists :檢查結果更容易,如果您願意,可以使用List(Of [Type])
,最終輸出不會改變。
這個示例類(名為Queries
)實現了這種結構。
它還包括序列化和反序列化(簡化,無錯誤檢查/處理)作為static
( shared
)方法。
假設jsonInput
是您的 JSON 對象:
反序列List(Of QueryBuilder)
:
Dim myQueries = Queries.Deserialize(jsonInput)
將List(Of QueryBuilder)
序列化回原始 JSON 對象。
請注意,使用 Visual Studio 中的 JSON 可視化工具,該結構將完全按照原始結構進行復制:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.