使用不同json中的无效键值访问JArray值

时间:2016-02-29 15:27:22

标签: c# json

我是这个json:

#container{
      // min-height:100%;
   position:relative;
}

.site-title a{
    font-family: Heiti TC;
    color: #E8970C;
}

.text-center{
    color: #E8970C;
}

.coming-soon h1{
    font-family: Heiti TC;
    font-size: 75px;
}

.row{
    // width:700px;
margin: 0px auto;
}

.col-xs-1{
    margin-left: 15px;
}



li{
    margin-right: 20px;
    margin-top: 20px;
}

img{
    width:40px;
}

但有时这可能会改变,所以我需要检查索引文本是否在传递的响应中可用,代码:

{
     "status": true,
     "Text": "Example"
}

问题是我在消息上得到了这个异常(如果json没有包含密钥var container = (JContainer)JsonConvert.DeserializeObject(response); var message = container["Text"]; ):

  

{"使用无效键值访问JArray值:\" Text \"。期望Int32数组索引。"}

我该如何避免这个问题?

1 个答案:

答案 0 :(得分:1)

您使用的是什么版本的NewtonSoft?

以下结果导致message为空并且不会抛出任何异常。

var res = @"{""status"": true }";

var container = (JContainer)JsonConvert.DeserializeObject(res);
var message = container["Text"];

// message = null

更新

根据您的回复,即使这样也不会抛出您所看到的异常:

var res = @"{}";

var container = (JContainer)JsonConvert.DeserializeObject(res);
var message = container["Text"];

更新了我的代码以反映您的相同版本我仍然没有得到您所看到的异常。这就是我正在做的事情:

var res = @"{""trace"":{""details"":{""[date]"":""[29-02-2016 17:07:29.773750]"",""[level]"":""[info]"",""[message]"":""[System Done.]""},""context"":[[{""ID"":""John Dillinger""}]]}}";

var container = (JContainer)JsonConvert.DeserializeObject(res);
var message = container["Text"];

message变量仍然为空。

鉴于此,或许尝试用上面的代码创建一个简单的控制台应用程序,看看你是否得到了同样的异常?