我得到这个错误:
系统。NullReferenceException: 'Object reference not set to a instance of Object '
我知道为什么我得到它-我正在解析一些JSON,不幸的是它在包括键不一致。有时,如果值为0,则包含某些键,其他时候则省略这些键。我还没有找到一个可行的解决办法。
理想情况下,我想要一个可以通过函数使用的解决方案,因为我不想为每个项目引发异常,但我不确定这是否可能。
这是我的代码:
using (StreamReader r = new StreamReader(@"pathfile.JSON"))
{
string json = r.ReadToEnd();
var root = JsonConvert.DeserializeObject<Root>(json);
}
foreach (var i in root.value)
{
Dictionary<string, Dictionary<string, double>> HOLDING_DICT =
new Dictionary<string, Dictionary<string, double>>();
if (i.type == "1")
{
Dictionary<string, double> income_statement_dict = GET_DATA(i.data);
}
}
static Dictionary<string, double> GET_DATA(DATA, data
{
Dictionary<string, double> temp_dict=
new Dictionary<string, double>();
temp_dict["itemx"] = data.thing.item;
return temp_dict;
}
这条线
temp_dict["itemx"] = data.thing.item;
特别是抛出错误,我没有包括所有的项目,但它的数量很大。
您可以在代码中添加null
检查。
if(data != null)
{
if(data.thing != null)
{
temp_dict["itemx"] = data.thing.item;
}
}
但是我又有一个问题,为什么你只需要一个字典来存储一个键值对?
我建议只从GET_DATA
方法返回string
或double
,并将string
或double
添加到HOLDING_DICT
作为值,而不是字典。
正如@Sir Gufo评论中提到的,你也可以根据c#版本尝试data?.thing != null
。但这只是同一件事的一种不同的写法。