使用JSON填充DataGridView的属性

时间:2018-09-19 19:18:56

标签: c# arrays json winforms datagridview

最近,我一直在尝试将json数据读取到C#代码中,目的是将属性数据存储在要在运行时加载的json文件中。例如,我想为每个数据网格制作一个json文件,并将每一列表示为一个唯一的json文件中的一部分;像这样的东西:

[
    {
        "colWidth": 1,
        "rowHeight": 10,
        "moreStuff": 20
    },
    {
        "ColWidth": 2,
        "rowHeight": 100,
        "SecondBAID": 200
    },
    {
        "ColWidth": 3,
        "rowHeight": 1000,
        "moreStuff": 2000
    },
    {
        "ColWidth": 4,
        "rowHeight": 10000,
        "moreStuff": 20000,
        "someArray: [true, 5, "Column notes"]
    },
    {
        "ColWidth": 5,
        "rowHeight": 100000,
        "moreStuff": 200000,
        "evenMoreStuff":300000
    }
]

我当前用于读取该文件并分配数据的代码如下:

        public static void LoadJson()
    {
        string json;
        using (StreamReader r = new StreamReader(@"test.json"))
        {
            json = r.ReadToEnd();
        }
        dynamic array = JsonConvert.DeserializeObject(json);

        var list = new List<MyClass>();
        foreach (var section in array)
        {
            var si = new MyClass();
            if (section.Whatever!= null)
            {
                si.Test1 = section.Whatever;
            }
            if (section.Whatever2!= null)
            {
                si.Test2 = section.Whatever2;
            }
            if (section.Whatever3!= null)
            {
                si.Test3 = section.Whatever3;
            }
            if (section.Whatever4!= null)
            {
                si.Test4 = section.Whatever4;
            }

            list.Add(si);
        }
    }

我对此有一些疑问...

1)有没有更简单的方法来过滤出空值?有时,我希望一列的属性为默认值,并且我宁愿不要嵌套许多if语句。有没有一种方法可以基本上说“如果此属性在json部分中不存在,请忽略它”

目前,我只是遍历所有可能的属性,在MyClass中进行简单的获取/设置,并存储变量(在此示例中,我使用“ whatevers”,因此我不会发布数百行代码;任何代表json文件中的合法字段。

2)我当前正在将json文件的每个部分添加到动态数组中。要向动态数组添加属性数组时如何实现?我想更改C#代码,以便如果我有一个嵌套数组,它将被添加到某种多级列表中。最好的方法是什么?

我正在使用此(Is it possible to have nested array json?)作为对json中嵌套数组的引用。

任何建议都会很棒!

0 个答案:

没有答案