Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 调用JObject.Parse()时处理null_C#_.net_Json_Json.net - Fatal编程技术网

C# 调用JObject.Parse()时处理null

C# 调用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

在下面的代码中,由于In
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。”