我要做的就是获取我的.json文件,只抓取该文件中的某些项目,然后使用该过滤后的数据填充组合框中的项目(使用Newtonsoft / Json.net)。我给你举个例子:
(部分)JSON文件数据:
[
{
"name": "Kerbol",
"radius": 261600000,
"mass": 1.7565670e+28
},
{
"name": "Moho",
"radius": 250000,
"mass": 2.5263617e+21
},
{
"name": "Eve",
"radius": 700000,
"mass": 1.2244127e+23
},
]
这不是所有数据,只是其中的一部分。它是关于游戏中的行星的一些信息" Kerbal Space Program"。我唯一感兴趣的(现在)只是抓住每个"名称" .json文件中的项目。然后我想在组合框中填充所有这些名称的items属性(在每一行上)。
我已经尝试了很多其他代码来过滤掉它,但我不太了解它可以重写它以满足我的需要。
编辑:我想稍后使用这个.json数据做更多的事情,但我只想尝试一步一步。
EDIT2:这适用于Windows窗体。
答案 0 :(得分:0)
这是一个wpf演示,我在我的电脑上测试过,你可以试试。
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
var data = MyModel.getTestData();
var dataStr = JsonConvert.SerializeObject(data, Formatting.Indented);
using (var writer = new StreamWriter(@"d:\data.json", false))
{
writer.Write(dataStr);
}
using (var reader = new StreamReader(@"d:\data.json"))
{
var recs = JsonConvert.DeserializeObject<List<MyModel>>(reader.ReadToEnd());
cbx.ItemsSource = recs;//cbx is ComboBox
cbx.DisplayMemberPath = "name";
cbx.SelectedIndex = 0;
}
}
}
public class MyModel
{
public string name { get; set; }
public double radius { get; set; }
public double mass { get; set; }
public static List<MyModel> getTestData()
{
return new List<MyModel>
{
new MyModel {name = "x1", radius = 1, mass = 1},
new MyModel {name = "x2", radius = 2, mass = 2},
new MyModel {name = "x3", radius = 3, mass = 3},
new MyModel {name = "x4", radius = 4, mass = 4},
};
}
}
答案 1 :(得分:0)
我设法在Discord上找到了一些我可以与之交谈的人,所以这有助于改善。几乎每一段我试过看过的代码对我来说都是无益的,因为我没有理解它足以挽救它。所以这就是它最终的结果:
celestialbodydata.cs
using System;
namespace KMAP
{
class CelestialBodyData
{
public string name { get; protected set; }
public double radius { get; protected set; }
public double mass { get; protected set; }
public CelestialBodyData(string name, double radius, double mass)
{
this.name = name;
this.radius = radius;
this.mass = mass;
}
}
}
Main Form.cs:
private void Form1_Load(object sender, EventArgs e)
{
SemMajAxTab_InputBodyRadius_ComboBox.Items.Clear();
OPTab_InputBodyMass_ComboBox.Items.Clear();
OPTab_InputBodyMass2_ComboBox.Items.Clear();
OPTab_InputBodyRadius_ComboBox.Items.Clear();
HohTab_InputBodyMass_ComboBox1.Items.Clear();
HohTab_InputBodyRadius_ComboBox1.Items.Clear();
HohTab_InputBodyMass_ComboBox2.Items.Clear();
HohTab_InputBodyRadius_ComboBox4.Items.Clear();
CelestialBodyData[] celestialbodydata_Array = JsonConvert.DeserializeObject<CelestialBodyData[]>(File.ReadAllText(@"C:\Users\Anase\Desktop\Visual C\KMAP\KMAP\bin\Release\celestialbodydata.json"));
string[] namesarray = new string[celestialbodydata_Array.Length];
for (int i = 0; i < celestialbodydata_Array.Length; i++)
{
namesarray[i] = (celestialbodydata_Array[i].name).ToString();
}
SemMajAxTab_InputBodyRadius_ComboBox.Items.AddRange(namesarray);
OPTab_InputBodyMass_ComboBox.Items.AddRange(namesarray);
OPTab_InputBodyMass2_ComboBox.Items.AddRange(namesarray);
OPTab_InputBodyRadius_ComboBox.Items.AddRange(namesarray);
HohTab_InputBodyMass_ComboBox1.Items.AddRange(namesarray);
HohTab_InputBodyRadius_ComboBox1.Items.AddRange(namesarray);
HohTab_InputBodyMass_ComboBox2.Items.AddRange(namesarray);
HohTab_InputBodyRadius_ComboBox4.Items.AddRange(namesarray);
}
它比我见过的许多其他东西简单得多。很难获得它,以便当您单击组合框中的项目时,它会在数组中搜索该名称,然后抓取相邻的质量或半径值,并用该替换组合框的文本。我是循环和数组的新手。