.net 如何反序列化json?
我的应用程序使用配置来管理游戏的modpack,因此配置加载程序的工作方式如下: 以下是configurations.json:.net 如何反序列化json?,.net,json,vb.net,serialization,token,.net,Json,Vb.net,Serialization,Token,我的应用程序使用配置来管理游戏的modpack,因此配置加载程序的工作方式如下: 以下是configurations.json: { "GameDirectory": "C:\\Users\\username\\AppData\\Roaming\\.mp-craft-project", "Configurations": { "MP-Craft-Default": { "Name": "MP-Craft-Default", "JavaPath": "C:\
{
"GameDirectory": "C:\\Users\\username\\AppData\\Roaming\\.mp-craft-project",
"Configurations": {
"MP-Craft-Default": {
"Name": "MP-Craft-Default",
"JavaPath": "C:\\ProgramFiles\\Java\\jre-xxx\\bin\\javaw.exe",
"FullScreenMode": "Enabled",
"ModLoader": "MCF_1.0"
},
"New-Configuration": {
"Name": "New-Configuration",
"JavaPath": "C:\\ProgramFiles\\Java\\jre-xxx\\bin\\javaw.exe",
"FullScreenMode": "Enabled",
"ModLoader": "MCF_2.0"
}
}
}
这个json中的字符串,例如modloader或fullscreenmode,可以是相同或不同(未知)的变体。
我想按名称加载所有配置,并加载所选配置的设置。有人能帮我吗,我如何反序列化这个json
我正在使用Newtonsoft.Json
进行反序列化
THX以获取帮助。您需要两个类,一个包含配置集合和各种“全局”数据,然后是一个用于项目的类:
Public Class Configs
Public Property GameDirectory As String
Public Property Configurations As Dictionary(Of String, ConfigItem)
Public Sub New()
Configurations = New Dictionary(Of String, ConfigItem)
End Sub
End Class
Public Class ConfigItem
Public Property Name As String
Public Property JavaPath As String
Public Property FullScreenMode As String ' I would use Boolean
Public Property ModLoader As String
End Class
要创建集合类并将配置项存储到其中,请执行以下操作:
Imports System.Environment
...
Dim myCfgs As New Configs
myCfgs.GameDirectory = Path.Combine(Environment.GetFolderPath(SpecialFolder.ApplicationData), ".mp-craft-project")
Dim p As New ConfigItem
p.Name = "Ziggy"
p.FullScreenMode = "Enabled"
p.ModLoader = "MCF_1.0"
p.JavaPath = "C:\ProgramFiles\Java\jre-xxx\bin\javaw.exe"
' add this item to the collection
myCfgs.Configurations.Add(p.Name, p)
' add another, create a new ConfigItem object
p = New ConfigItem
p.Name = "Hoover"
p.FullScreenMode = "Enabled"
p.ModLoader = "MCF_2.0"
p.JavaPath = "...javaw.exe"
myCfgs.Configurations.Add(p.Name, p)
要从要使用的集合中获取一个,请执行以下操作:
Dim thisCfg As ConfigItem = myCfgs.Configurations("Ziggy")
Console.WriteLine("Name: {0}, JavaPath: {1}, ModLoader: {2}",
thisCfg.Name, thisCfg.JavaPath, thisCfg.ModLoader)
输出:
名称:Ziggy,JavaPath:C:\ProgramFiles\Java\jre xxx\bin\javaw.exe,ModLoader:MCF_1.0
要序列化/保存它,请执行以下操作:
' save all configs to disk:
Dim jstr = JsonConvert.SerializeObject(myCfgs)
File.WriteAllLines(saveFileName, jstr)
要加载最后一组保存的配置,请执行以下操作:
' load the text, then deserialize to a Configs object:
Dim jstr = File.ReadAllText(saveFileName)
Dim myCfgs As Configs = JsonConvert.DeserializeObject(Of Configs)(jstr)
有一些改进和注意事项:
“C:\path\file\…”
而不是“C:\\path\\file\…”
。序列化程序添加额外的\
sEnabled
来确定全屏“MCF_1.0”
,因此您不必解析它来确定它是1
、1.1
还是2.0
你想反序列化哪一个?在名称中允许空格可能会导致问题:“示例配置”与“示例配置”不匹配。您是从其他地方获得这些还是您的发明?我之所以这么问,是因为将它们组合起来似乎比试图从ASo中的文本中找到B更容易。我需要做的是:加载配置,然后加载所选配置的设置。好吧,与其将实际配置保存在不同的json中,不如将名称保存在,保存实际配置…如下所示:您的配置存在一些问题-字符串数组包含2条信息-0、2、4。。。是“名称”,1、3、5将是文件名-难以管理。另外,如果这只是您的本地存储,并且您不将它们发送到任何地方,那么XML序列化程序将更适合JSON用于数据交换,如果这是本地存储,XML序列化将更好。无论哪种方式,编辑你的问题以获得你想要的答案。你应该发布一个新的问题,以便代码格式正确-我看不懂。但是,由于它不是一个数组,因此需要对每个