【问题标题】:Populate combobox with data from JSON file使用 JSON 文件中的数据填充组合框
【发布时间】: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,但我似乎无法通过循环来获取所有项目。

标签: json vb.net winforms


【解决方案1】:

已经有一段时间了,所以我很生疏,但是一旦我将 JSON 放入列表中,我所需要的就是:

Dim ID As List(Of String) = root.Items.ItemObjects.Select(Of String)(Function(tp) tp.Id).ToList()
cmbWeaponID.DataSource = ID 

【讨论】:

    猜你喜欢
    • 2013-04-26
    • 2017-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-03
    • 2014-09-04
    • 2019-01-29
    • 1970-01-01
    相关资源
    最近更新 更多