我要做的是获取我的.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
},
]
这并不是所有的数据,只是其中的一部分。这是游戏“克巴尔太空计划”中关于行星的一些信息。(现在)我唯一感兴趣的事情就是抓取.json文件中的每个"name“项。然后,我想用所有这些名称(在每一行上)填充combobox中的items属性。
我已经尝试了很多其他代码来过滤它,但我还不够了解,无法重写它来按我需要的方式工作。
编辑:稍后我想对这些.json数据做更多的工作,但我只是想一步一步地做这件事。
EDIT2:这是针对Windows Forms的。
发布于 2016-11-13 10:59:35
这是一个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},
};
}
}
发布于 2016-11-13 16:49:09
我设法找到了一些不和谐的人,我可以和他们交谈,这对我有很大的帮助。几乎我看到的每一段试图查找它的代码对我都没有帮助,因为我对它的理解还不够充分,无法挽救它。所以这是它最终的结果:
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;
}
}
}
主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);
}
它比我见过的许多其他东西简单得多。最困难的部分是获取它,这样当您单击组合框中的项目时,它会在数组中搜索该名称,然后获取相邻的质量或半径值,并用该值替换组合框的文本。我不熟悉循环和数组。
https://stackoverflow.com/questions/40570135
复制相似问题