C# 调用JObject.Parse()时处理null
在下面的代码中,由于InC# 调用JObject.Parse()时处理null,c#,.net,json,json.net,C#,.net,Json,Json.net,在下面的代码中,由于InJObject.Parse()中的值导致了一个空值,这当然是无法解析的,因此我得到了一个异常 JObject result = JObject.Parse(responseData["Result"].ToString()); 为了尝试解决这个问题,我尝试了以下方法,以便在调用parse之前完成空检查 var resultString = string.IsNullOrEmpty(responseData["Result"].ToString()) ? "" : res
JObject.Parse()
中的值导致了一个空值,这当然是无法解析的,因此我得到了一个异常
JObject result = JObject.Parse(responseData["Result"].ToString());
为了尝试解决这个问题,我尝试了以下方法,以便在调用parse之前完成空检查
var resultString = string.IsNullOrEmpty(responseData["Result"].ToString()) ? "" : responseData["Result"].ToString();
JObject result = JObject.Parse(resultString);
这仍然会导致一个例外,我觉得我只是忽略了一些非常小的东西。如何处理此处可能出现的空值。这与
JObject无关。Parse
-我怀疑它将通过返回空的或空的JObject来处理空值
最有可能的是你;您缺少responseData[“Result”]
为null的信息,您正试图对其调用ToString()
。这将导致NullReferenceException
通过检查null来修复它:
var resultString = (responseData["Result"] == null || string.IsNullOrEmpty(responseData["Result"].ToString()))
? ""
: responseData["Result"].ToString();
JObject result=JObject.Parse(responseData[“result”].ToString())代码>可能由于以下几个原因引发异常:
- 如果
responseData
本身为空,则尝试访问responseData[“Result”]
将引发异常
- 如果
responseData[“Result”]
为空(例如,如果responseData
中没有名为“Result”的键),则尝试访问responseData[“Result”]。ToString()
将引发异常
- 如果
responseData[“Result”].ToString()
为null(或空),则将抛出JObject.Parse()
,因为null不是有效的JSON字符串
仅仅检查string.IsNullOrEmpty(responseData[“Result”].ToString())
不足以修复它,因为它只处理这三种情况中的最后一种。异常很可能是在调用ToString()
之前抛出的,您只需检查ToString()
的结果是否为null。到那时已经太晚了
当您遇到这样的情况,即您有一行复杂的代码,并且它在其中的某个位置抛出异常时,将其分解并在每一步执行空检查会有所帮助。通过这种方式,您可以轻松地逐步使用调试器,并准确地看到正在发生的事情
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;
responseData[“Result”]的值是多少?该值为null,因此您应该添加一个null检查,或者使用Convert.ToString()而不是ToString()。当我这样做时,当我将结果字符串传递到JObject.parse()中时,仍然会收到错误
function尽量避免为空谢谢,尽管“从JsonReader.Path“”读取JObject时出错,第0行,位置0。”