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);
                }

c# JSON.NET从文件中删除最后一部分

你注意到了吗?

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
                         };