"Cannot access child value on Newtonsoft.Json.Linq.JValue."
"Cannot access child value on Newtonsoft.Json.Linq.JValue."
对不起,如果这是一个基本的,我对此还很陌生。
我有一个带有 JSON 数据的 JObject jObj,它可能有也可能没有子对象。
场景一
},
"feedback": {
"rating": false,
"comment": "test"
},
场景二
},
"feedback": null,
我想做的是处理这两种情况,最初我想如果一个子对象不存在我可以用 null 求值,但它似乎并不那么简单。
var jObj = (JObject)JsonConvert.DeserializeObject(JSON, new JsonSerializerSettings() { DateParseHandling = DateParseHandling.None });
string rating = (string)jObj["feedback"]["rating"];
string rating_comment = (string)jObj["feedback"]["rating_comment"];
场景 1 工作正常,但场景 2 抛出以下异常。
"Cannot access child value on Newtonsoft.Json.Linq.JValue."
然后我尝试了一种不同的方法,试图在引用反馈键之前评估“反馈”是否有对象。
JObject jObjFeedback = (JObject)jObj.GetValue("feedback");
bool containsFeedback = jObjFeedback.ContainsKey("rating");
if (containsFeedback)
{
rating = (string)jObj["feedback"]["rating"];
rating_comment = (string)jObj["feedback"]["rating_comment"];
}
else
{
log.Info("No feedback rating found");
}
由于反馈对象存在,这对于场景 1 也能正常工作,但如果不存在,我会得到以下异常。
"Unable to cast object of type 'Newtonsoft.Json.Linq.JValue' to type
'Newtonsoft.Json.Linq.JObject'"
我确定一定有一种简单的方法可以处理这两种情况,不幸的是我似乎找不到它。
非常感谢任何帮助。
使用HasValues
属性检查反馈是否有子对象
var jObj = (JObject)JsonConvert.DeserializeObject(JSON, new JsonSerializerSettings() { DateParseHandling = DateParseHandling.None });
if(jObj.GetValue("feedback").HasValues)
{
var rating = (string)jObj["feedback"]["rating"];
var rating_comment = (string)jObj["feedback"]["rating_comment"];
}
else
{
log.Info("No feedback rating found");
}
对不起,如果这是一个基本的,我对此还很陌生。
我有一个带有 JSON 数据的 JObject jObj,它可能有也可能没有子对象。
场景一
},
"feedback": {
"rating": false,
"comment": "test"
},
场景二
},
"feedback": null,
我想做的是处理这两种情况,最初我想如果一个子对象不存在我可以用 null 求值,但它似乎并不那么简单。
var jObj = (JObject)JsonConvert.DeserializeObject(JSON, new JsonSerializerSettings() { DateParseHandling = DateParseHandling.None });
string rating = (string)jObj["feedback"]["rating"];
string rating_comment = (string)jObj["feedback"]["rating_comment"];
场景 1 工作正常,但场景 2 抛出以下异常。
"Cannot access child value on Newtonsoft.Json.Linq.JValue."
然后我尝试了一种不同的方法,试图在引用反馈键之前评估“反馈”是否有对象。
JObject jObjFeedback = (JObject)jObj.GetValue("feedback");
bool containsFeedback = jObjFeedback.ContainsKey("rating");
if (containsFeedback)
{
rating = (string)jObj["feedback"]["rating"];
rating_comment = (string)jObj["feedback"]["rating_comment"];
}
else
{
log.Info("No feedback rating found");
}
由于反馈对象存在,这对于场景 1 也能正常工作,但如果不存在,我会得到以下异常。
"Unable to cast object of type 'Newtonsoft.Json.Linq.JValue' to type 'Newtonsoft.Json.Linq.JObject'"
我确定一定有一种简单的方法可以处理这两种情况,不幸的是我似乎找不到它。
非常感谢任何帮助。
使用HasValues
属性检查反馈是否有子对象
var jObj = (JObject)JsonConvert.DeserializeObject(JSON, new JsonSerializerSettings() { DateParseHandling = DateParseHandling.None });
if(jObj.GetValue("feedback").HasValues)
{
var rating = (string)jObj["feedback"]["rating"];
var rating_comment = (string)jObj["feedback"]["rating_comment"];
}
else
{
log.Info("No feedback rating found");
}