【发布时间】:2014-10-18 14:40:50
【问题描述】:
我正在尝试为格式非常明确的 JSON 文件构建我认为应该是相对简单的阅读器/编辑器,主要是为了防止用户弄乱语法。
Json 格式为:
"Items": {
"defaultActionClass": "Weaponclass",
"ItemObjects": [
{
"Id": "M16",
"Name": "EM16",
"Description": "Some Description",
"Icon": "Icons/pictures/1.png",
"AnimationSet": "Set1",
"Type": "Weapon",
"EquipmentClass": "Hands",
"SlotsCount": 2,
"Weight": 1,
"AP": 1,
"BurstFire": 1,
"AutoFire": 0,
"EffectiveRange": 8.0,
"MuzzleVelocity": 2.5,
"BaseAccuracy": 100.0,
"Mobility": 6.0,
"Damage": 30,
"DamageFalloff": 30,
"AmmoClips": [
"AmmoClip556NATOx30"
]
},
我可以在字符串中读取,这不是问题,我正在努力解决以下两项。
找到了一种使用以下代码获取 ID 的方法:
Dim root As RootObject = JsonConvert.DeserializeObject(Of RootObject)(strjson)
Dim ID As List(Of String) = root.Items.ItemObjects.Select(Of String)(Function(tp) tp.Id).ToList()
返回列表中的所有 60 个 ID,现在我的挑战是将该列表放入组合框中。我知道我以前在其他项目上也这样做过,但我一直在逃避这一点。
平滑地过度思考组合框。
cmbWeaponID.DataSource = ID
好的,现在要弄清楚如何从组合框的 SelectedIndexChanged 上的每个 ID 中获取其余数据并将其导入到不同的文本框中。
使用以下代码也能顺利进行:
Dim o As JObject = JObject.Parse(strjson)
Dim Type As String = CStr(o.SelectToken("Items.ItemObjects[" & cmbWeaponID.SelectedIndex & "].Type"))
Dim Name As String = CStr(o.SelectToken("Items.ItemObjects[" & cmbWeaponID.SelectedIndex & "].Name"))
Dim Description As String = CStr(o.SelectToken("Items.ItemObjects[" & cmbWeaponID.SelectedIndex & "].Description"))
Dim Icon As String = CStr(o.SelectToken("Items.ItemObjects[" & cmbWeaponID.SelectedIndex & "].Icon"))
Dim AnimationSet As String = CStr(o.SelectToken("Items.ItemObjects[" & cmbWeaponID.SelectedIndex & "].AnimationSet"))
Dim SlotsCount As String = CStr(o.SelectToken("Items.ItemObjects[" & cmbWeaponID.SelectedIndex & "].SlotsCount"))
Dim Weight As String = CStr(o.SelectToken("Items.ItemObjects[" & cmbWeaponID.SelectedIndex & "].Weight"))
Dim APCost As String = CStr(o.SelectToken("Items.ItemObjects[" & cmbWeaponID.SelectedIndex & "].AP"))
Dim BurstFire As String = CStr(o.SelectToken("Items.ItemObjects[" & cmbWeaponID.SelectedIndex & "].BurstFire"))
Dim AutoFire As String = CStr(o.SelectToken("Items.ItemObjects[" & cmbWeaponID.SelectedIndex & "].AutoFire"))
Dim EffectiveRange As String = CStr(o.SelectToken("Items.ItemObjects[" & cmbWeaponID.SelectedIndex & "].EffectiveRange"))
Dim MuzzleVelocity As String = CStr(o.SelectToken("Items.ItemObjects[" & cmbWeaponID.SelectedIndex & "].MuzzleVelocity"))
Dim BaseAccuracy As String = CStr(o.SelectToken("Items.ItemObjects[" & cmbWeaponID.SelectedIndex & "].BaseAccuracy"))
Dim Mobility As String = CStr(o.SelectToken("Items.ItemObjects[" & cmbWeaponID.SelectedIndex & "].Mobility"))
Dim Damage As String = CStr(o.SelectToken("Items.ItemObjects[" & cmbWeaponID.SelectedIndex & "].Damage"))
Dim DamageFalloff As String = CStr(o.SelectToken("Items.ItemObjects[" & cmbWeaponID.SelectedIndex & "].DamageFalloff"))
【问题讨论】:
-
非常非常容易看看json.codeplex.com
-
到目前为止,我已经能够使用 SelectToken("Items").SelectToken("ItemObjects[0].Id").ToString) 从文件中提取第一个 ID,这让我第一个项目 ID,但我似乎无法通过循环来获取所有项目。