我已经创建了一个winform来保存发票数据。它通常将数据以json格式存储到文本文件中。稍后,用户可以上传到调用此文件的服务器。但我的方法是覆盖文件,所以只能存储一个发票数据。我需要在每个保存发票请求中添加数据。
我在下面的链接中找到了另一个场景:如何在不影响格式的情况下附加一个json文件。但是,这对我不起作用。因为我正在使用列表项将字典添加到字典中。这在上面的回答中没有提到。
以下是按下保存按钮时执行的操作的代码片段:
var inv_continer = new List<dynamic>();
var inv_details = new Dictionary<string, string>();
int i = 1;
//iterating through items in dg
foreach (DataGridViewRow row in dataGridView1.Rows)
{
//check the row contian data or not
if (row.Cells["Column4"].Value != null)
{
inv_details = new Dictionary<string, string>
{
{"key1", i.ToString()},
{"key2", row.Cells["Column10"].Value.ToString()},
{"key3", row.Cells["Column3"].Value.ToString()},
{"key4", row.Cells["Column9"].Value.ToString()},
{"key5", ""},
{"key6", ""},
{"key6", ""},
{"key7", row.Cells["Column5"].Value.ToString()},
{"key8", row.Cells["Column4"].Value.ToString()},
{"key9", row.Cells["Column6"].Value.ToString()},
{"key10", "0.00"}
};
inv_continer.Add(JsonConvert.SerializeObject(inv_details));
i++;
}
}
//var json_container = JsonConvert.SerializeObject(inv_continer);
var json_container = "[";
foreach (var item in inv_continer)
{
if (inv_continer[0] != item)
{
json_container += ",";
}
json_container += item;
}
json_container += "]";
//appending header and footer to inv details
dynamic data = new Dictionary<string, string>
{
{"key1","data_1"},
{"Key2","data_2"},
{"key3", json_container},
{"key4", ""}
};
try
{
File.WriteAllText("temp_", JsonConvert.SerializeObject(data));
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
其中“temp_”是带有json的文件
我想获得用于将第二个发票作为第二个对象添加到同一个json的语法,依此类推。。。