小编Sco*_*ott的帖子

“无法访问 Newtonsoft.Json.Linq.JValue 上的子值。”

抱歉,如果这是一个基本的问题,我对此还很陌生。

我有一个带有 JSON 数据的 JObject jObj,它可能有也可能没有子对象。

场景1

  },
  "feedback": {
    "rating": false,
    "comment": "test"
  },
Run Code Online (Sandbox Code Playgroud)

场景2

  },
  "feedback": null,
Run Code Online (Sandbox Code Playgroud)

我想做的是处理这两种情况,最初我认为如果子对象不存在,我可以用 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"];
Run Code Online (Sandbox Code Playgroud)

场景 1 工作正常,但场景 2 抛出以下异常。

“无法访问 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");
}
Run Code Online (Sandbox Code Playgroud)

同样,这对于场景 1 来说效果很好,因为反馈对象存在,但是当反馈对象不存在时,我会收到以下异常。

“无法将“Newtonsoft.Json.Linq.JValue”类型的对象转换为“Newtonsoft.Json.Linq.JObject”类型”

我确信一定有一种简单的方法来处理这两种情况,不幸的是我似乎找不到它。 …

c# linq json json.net

6
推荐指数
1
解决办法
1万
查看次数

标签 统计

c# ×1

json ×1

json.net ×1

linq ×1