For the exact syntax you mention, you can cast your JObject as dynamic.
var jObj = JsonConvert.DeserializeObject<dynamic>(text);string value1 = jObj.foo?.bar?.baz ?? "default";
Here's a LINQPad sample showing your example working as expected.
If you'd prefer to avoid dynamic
(I wouldn't blame you), you can use SelectToken like this:
var jObj = JsonConvert.DeserializeObject<JObject>(text);string value1 = (string)jObj.SelectToken("foo.bar.baz") ?? "default";