在下面的代码中,由于JObject.Parse()
中的值导致null而导致异常,因此无法解析。
JObject result = JObject.Parse(responseData["Result"].ToString());
为了尝试解决这个问题,我尝试了以下操作,以便在调用parse之前完成空检查。
var resultString = string.IsNullOrEmpty(responseData["Result"].ToString()) ? "" : responseData["Result"].ToString();
JObject result = JObject.Parse(resultString);
这仍然会导致异常,我觉得我只是在这里忽略了一些非常小的东西。我该怎么做才能解决可能的空值。
答案 0 :(得分:1)
JObject result = JObject.Parse(responseData["Result"].ToString());
可能会抛出异常:
responseData
本身为null,则尝试访问responseData["Result"]
将引发异常。responseData["Result"]
为空(例如,如果responseData
中没有名为“结果”的键),则尝试访问responseData["Result"].ToString()
将引发异常。responseData["Result"].ToString()
为空(或为空),则JObject.Parse()
将抛出,因为null不是有效的JSON字符串。仅仅检查string.IsNullOrEmpty(responseData["Result"].ToString())
并不足以解决问题,因为它只解决了这三种情况中的最后一种情况。很可能在<{em> ToString()
调用之前抛出了异常,并且您只检查ToString()
的结果是否为空。到那时为时已晚。
当你遇到这样的情况,你有一个复杂的代码行,并且它在其中的某个地方抛出异常时,它有助于将其分解并在每一步执行空检查。通过这种方式,您可以轻松地使用调试器,并确切了解正在发生的事情。
JObject result = null;
if (responseData != null)
{
object obj = responseData["Result"];
if (obj != null)
{
string str = obj.ToString();
if (!string.IsNullOrEmpty(str))
{
result = JObject.Parse(str);
}
}
}
说了这么多之后,我想指出你的代码似乎比你需要的代码更复杂。您没有在问题中说responseData
是什么,但根据您使用它的方式,我猜它是JObject
。如果确实如此,则您不需要将responseData["result"]
转换为字符串,然后将其重新解析为JObject
。相反,你需要做的就是施展它:
JObject result = responseData != null ? responseData["Result"] as JObject : null;
答案 1 :(得分:0)
这与JObject.Parse
无关 - 我怀疑只会返回一个null或空的JObject来处理null。
最有可能的是你;错过responseData["Result"]
为空,并且您正试图在其上调用ToString()
。这将导致NullReferenceException
通过检查null来修复它:
var resultString = (responseData["Result"] == null || string.IsNullOrEmpty(responseData["Result"].ToString()))
? ""
: responseData["Result"].ToString();