最近,我一直在尝试将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中嵌套数组的引用。
任何建议都会很棒!