c# JSON.NET从文件中删除最后一部分
本文关键字:删除 最后 一部分 文件 JSON NET | 更新日期: 2023-09-27 18:06:24
我使用c# 2015,和一个表单与datagrview在它。我的用户输入一些数据并单击一个按钮。然后用这段代码生成json:
var llist = new List<Nachrichten_Felder>();
//Loop through datagridview rows
foreach (DataGridViewRow row in dgvNachrichten.Rows)
{
string datum = null;
string nachricht = null;
if (row.Cells["Datum"].Value != null)
datum = row.Cells["Datum"].Value.ToString();
if (row.Cells["Nachricht"].Value != null)
nachricht = row.Cells["Nachricht"].Value.ToString();
var obj = new Nachrichten_Felder()
{
Datum = datum,
Nachricht = nachricht
};
llist.Add(obj);
}
我的datagridview给我导出以下JSON后:
{
"export": [
{
"value": "de",
"tp": "df"
},
{
"value": "rr",
"tp": "df"
},
{
"value": null,
"tp": null
}
]
}
我如何使用JSON.net删除"null"的最后一部分?我猜这些空值来自最后一个datagridview行它是空的。
呢?
//Setup list object
var llist = new List<Nachrichten_Felder>();
//Loop through datagridview rows
foreach (DataGridViewRow row in dgvNachrichten.Rows)
{
string datum = null;
string nachricht = null;
if ((row.Cells["Datum"].Value != null) && (row.Cells["Nachricht"].Value != null))
if (row.Cells["Datum"].Value != null)
datum = row.Cells["Datum"].Value.ToString();
if (row.Cells["Nachricht"].Value != null)
nachricht = row.Cells["Nachricht"].Value.ToString();
var obj = new Nachrichten_Felder()
{
Datum = datum,
Nachricht = nachricht
};
llist.Add(obj);
}
你注意到了吗?
var llist = new List<Nachrichten_Felder>();
//Loop through datagridview rows
foreach (DataGridViewRow row in dgvNachrichten.Rows)
{
string datum = null;
string nachricht = null;
if (row.Cells["Datum"].Value != null)
datum = row.Cells["Datum"].Value.ToString();
if (row.Cells["Nachricht"].Value != null)
nachricht = row.Cells["Nachricht"].Value.ToString();
var obj = new Nachrichten_Felder()
{
Datum = datum,
Nachricht = nachricht
};
llist.Add(obj);
}
即使在datum或nachright上没有任何数据, obj
仍被实例化?
在尝试删除JSON之前,尝试更改
的逻辑if ((row.Cells["Datum"].Value != null) && (row.Cells["Nachricht"].Value != null)) { ... }
老实说,有两种方法。
方法1:在填充列表时不要添加任何null。
var llist = new List<Nachrichten_Felder>();
//Loop through datagridview rows
foreach (DataGridViewRow row in dgvNachrichten.Rows)
{
string datum = null;
string nachricht = null;
datum = row.Cells["Datum"].Value?.ToString();
nachricht = row.Cells["Nachricht"].Value?.ToString();
if (datum != null && nachricht! = null)
{
var obj = new Nachrichten_Felder()
{
Datum = datum,
Nachricht = nachricht
};
llist.Add(obj);
}
}
方法2:使用Linq
如果你使用LINQ
你的整个实现将会大大简化 var list = dgvNachrichten.Rows.Cast<DataGridViewRow>()
.Where(x => x.Cells["Datum"].Value != null && x.Cells["Nachricht"].Value != null)
.Select(x => new Nachrichten_Felder()
{
Datum = x.Cells["Datum"].Value.ToString(),
Nachricht = x.Cells["Datum"].Value.ToString()
}).ToList();
简短地填充答案的其余部分并重构方法1。
必须为Jsn设置config。Net并忽略Null值,如下所示:
JsonConvert.SerializeObject(myObject,
Newtonsoft.Json.Formatting.None,
new JsonSerializerSettings {
NullValueHandling = NullValueHandling.Ignore
});
或
JsonSerializer _jsonWriter = new JsonSerializer {
NullValueHandling = NullValueHandling.Ignore
};