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

时间:2016-09-10 12:15:46

标签: c# datagridview

我正在使用C#2015,以及一个包含datagrdview的表单。我的用户输入一些数据并单击按钮。然后使用此代码生成一些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删除最后一部分&#34; null&#34;?我想这些空值来自最后一个数据网格视图行,即emtpy ...

喜欢这个?

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

3 个答案:

答案 0 :(得分:0)

你什么时候注意到了:

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);
    }
即使您没有关于数据或nachricht的任何数据,

obj也会被实例化?

在尝试删除JSON之前,请尝试更改

的逻辑
if ((row.Cells["Datum"].Value != null) && (row.Cells["Nachricht"].Value != null)) { ... }

答案 1 :(得分:0)

说实话,你可以用两种方式做到这一点。

方法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.

答案 2 :(得分:0)

您必须为Jsn.Net设置配置并忽略Null Value,如下所示:

JsonConvert.SerializeObject(myObject, 
                        Newtonsoft.Json.Formatting.None, 
                        new JsonSerializerSettings { 
                            NullValueHandling = NullValueHandling.Ignore
                        });

JsonSerializer _jsonWriter = new JsonSerializer {
                             NullValueHandling = NullValueHandling.Ignore
                         };