【发布时间】:2020-11-06 21:03:56
【问题描述】:
我是 JSON.Net 的新手,无法弄清楚如何将我的 JSON 的嵌套对象作为JObject 获取。我正在使用一个文件来存储我的 JSON 对象,然后将我所做的更改写回该文件。
背景
我正在尝试制作一个应用程序,用户在其计算机上选择一个文件夹,该应用程序将该文件夹及其所有文件枚举到 JSON 对象中。然后,用户可以选择这些文件中的任何一个并设置该文件的值以保存到 JSON 文件中。到目前为止,我已经完成了将目录结构/包含的文件生成为 JSON 并将其保存到文件中的功能,但我一直在尝试访问 JSON 的嵌套对象以设置属性值。
到目前为止我的代码
用于生成 JSON 并将其存储到文件中的代码是:
Private Sub btnAddFolder_Click(sender As Object, e As EventArgs) Handles btnAddFolder.Click
'Create JObject from JSON File
Dim json = File.ReadAllText(jsonFile)
Dim obj As New JObject
If json <> "" Then
obj = JObject.Parse(json)
End If
'Add directory as a nested object of JSON
' - Add all of files in directory as nested objects of the directory object
If obj.Property(txtDirectory.Text) Is Nothing Then
'Object to store all files as nested objects
Dim files As New JObject
'Object to store all properties of a file object
Dim fileInfo As New JObject
'Variables to store properties for fileInfo
Dim stringProp As String = "default"
Dim arrProp() As String = {"default"}
Dim jArrProp As JArray = JArray.FromObject(arrProp)
'Add properties to objcet
fileInfo.Add("var1", stringProp)
fileInfo.Add("var2", jArrProp)
'Add object of properties to each file object
For Each file As String In Directory.GetFiles(txtDirectory.Text)
files.Add(file, fileInfo)
Next
'Add each file object to directory object
obj.Add(txtDirectory.Text, files)
End If
'Write JSON to file
File.WriteAllText(jsonFile, JsonConvert.SerializeObject(obj, 1))
End Sub
生成的文件/JSON 看起来像:
{
"Directory1": {
"File1": {
"var1": "default",
"var2": ["default"]
},
"File2": {
"var1": "default",
"var2": ["default"]
}
},
"Directory2": {
"File1": {
"var1": "default",
"var2": ["default"]
},
"File2": {
"var1": "default",
"var2": ["default"]
}
}
}
接下来我需要什么
当单击标记为Add Folder 的按钮时调用上面的代码。
另一个标记为Select File and Set Data 的按钮提示用户从目录中选择任何文件并输入将存储在该文件的var1 和var2 中的值。
例如,当单击Select File and Set Data 按钮时,用户选择File1,然后写下“此文件是我 2012 年去岛屿度假的照片”。在一个文本框中。我需要我的代码将obj.Directory1.File1 的var1 设置为指定的字符串值。
这就是我难住的地方。我不知道如何使用 JSON.net 访问嵌套对象以设置其属性之一的值。
我知道 JObject 有一个 .Property().Value() 方法,可用于设置或获取属性的值,但由于我的预期 JSON 对象嵌套在主 JSON 对象中,我不知道如何将其作为JObject 获取以访问该方法。 JObject.Item() 返回一个没有 .Property().Value() 方法的 JToken。
【问题讨论】:
标签: json vb.net winforms json.net