我有一个带有两个按钮的表格,button1
和button2
。每当我推送button2
,表单中都会添加两个文本框,一个表示“名称”,另一个表示ISP的“ipAddresses”。
这是按下按钮两次时的样子:
当我推送时button1
,我想从文本框中读取值并将它们序列化为JSON文件。JSON应该如下所示:
{
"header": {
"isp": [
{
"name": "smth",
"ipAddresses": "smth"
},
{
"name": "smth",
"ipAddresses": "smth"
}
]
}
}
我创建新文本框的代码正在运行,但是我无法从新文本框中获取值并将它们添加到JSON中。我试图按照我的理解去做 这是的地方崩溃我的代码:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public int i = 0;
public int a;
List<TextBox> textBoxes = new List<TextBox>();
public class Isp
{
public List<string> name { get; set; }
public List<string> IPAddresses { get; set; }
}
public class test
{
public List<Isp> isp { get; set; }
}
private void button2_Click(object sender, EventArgs e)
{
if (i < 10)
{
textBoxes.Add(new TextBox());
textBoxes[i].Name = "TextBox" + i.ToString();
textBoxes[i].Location = new Point(90, 10 + i * 25);
textBoxes[i].Size = new System.Drawing.Size(298, 20);
textBoxes[i].Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.Controls.Add(textBoxes[i]);
i++;
textBoxes.Add(new TextBox());
textBoxes[i].Name = "TextBox" + i.ToString();
textBoxes[i].Location = new Point(90, 10 + i * 25);
textBoxes[i].Size = new System.Drawing.Size(298, 20);
textBoxes[i].Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.Controls.Add(textBoxes[i]);
i++;
}
}
private void button1_Click(object sender, EventArgs e)
{
SaveFileDialog saveFileDialog1 = new SaveFileDialog();// это часть магии для сохранения файла,вывод окно с выбором куда и с каким именем сохранять. её просто копировать
saveFileDialog1.Filter = "JSON files(*.json)|*.json|All files(*.*)|*.*";
if (saveFileDialog1.ShowDialog() == DialogResult.Cancel)
{
return;
}
Isp isp = new Isp { };
a = 1;
foreach (TextBox textBox in textBoxes)
{
if (a / 2 != 0)
{
isp.name.Add(textBox.Text);
}
else if (a/2 == 0)
{
isp.IPAddresses.Add(textBox.Text);
}
a++;
}
string json = JsonConvert.SerializeObject(isp, Formatting.Indented);//завершающая часть сохранения файла
string filename = saveFileDialog1.FileName;
System.IO.File.WriteAllText(filename, json);
// System.Console.WriteLine(json);//вывод
MessageBox.Show("Файл сохранен", "Успех!", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
}
}
哪里错了呢
发布于 2019-04-02 08:41:24
第一个问题是您的模型类与您要创建的JSON的结构不匹配。用以下内容替换您的Isp
和test
类:
public class RootObject
{
public RootObject()
{
Header = new Header();
}
[JsonProperty("header")]
public Header Header { get; set; }
}
public class Header
{
public Header()
{
IspList = new List<Isp>();
}
[JsonProperty("isp")]
public List<Isp> IspList { get; set; }
}
public class Isp
{
[JsonProperty("name")]
public string Name { get; set; }
[JsonProperty("ipAddresses")]
public string IPAddresses { get; set; }
}
当您填写的模型,你需要添加一个Isp
到IspList
每两个TextBoxes
。TextBox
每对中的第一个将包含Name
,第二个将包含IPAddresses
。你可以像这样写:
RootObject root = new RootObject();
for (int j = 0; j < textBoxes.Count; j += 2) // count by 2
{
Isp isp = new Isp();
isp.Name = textBoxes[j].Text;
isp.IPAddresses = textBoxes[j + 1].Text;
root.Header.IspList.Add(isp);
}
最后,要创建完整的JSON,您需要序列化RootObject
:
string json = JsonConvert.SerializeObject(root, Formatting.Indented);
https://stackoverflow.com/questions/-100006535
复制相似问题