我如何处理System.NullReferenceException?



我得到这个错误:

系统。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方法返回stringdouble,并将stringdouble添加到HOLDING_DICT作为值,而不是字典。

正如@Sir Gufo评论中提到的,你也可以根据c#版本尝试data?.thing != null。但这只是同一件事的一种不同的写法。

相关内容

最新更新