繁体   English   中英

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

[英]C# JSON.NET remove last part from file

我正在使用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);
        }

导出以下JSON之后,我的datagridview给了我:

{
      "export": [
        {
          "value": "de",
          "tp": "df"
        },
        {
          "value": "rr",
          "tp": "df"
        },
        {
          "value": null,
          "tp": null
        }
      ]
    }

如何使用JSON.net删除带有“空”的最后一部分? 我想这些空值来自空的最后一个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或nachricht上没有任何数据, 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.Net设置config,并忽略Null Value,如下所示:

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

要么

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM