我有一个JSON对象,我从API获得,我需要检查JSON响应中的错误。然而,当没有错误时,错误值不存在。还请注意,API不可靠,我无法从中创建POCO,这是不可能的。
因此,我得到了KeyNotFoundException
,在处理深度嵌套的JsonElement时,是否有办法使用某种条件运算符(即“Elvis”运算符)?
我试着做?.GetProperty
,但它说Operator '?' cannot be applied to operand of type 'JsonElement'
。
那么我的选择是什么呢?在这个例子中,我真的必须TryGetProperty
并创建3个变量吗?如果我的JSON嵌套得更深,我必须为每个嵌套创建变量,然后检查它是否为null?看起来有点荒谬,必须有另一种方法。
这里还有一个关于GitHub上这个主题的老问题。(https://github.com/dotnet/runtime/issues/30450)我想也许有人知道一些解决这个问题的方法。
例如,下面是我的代码:
var isError = !string.IsNullOrEmpty(json.RootElement.GetProperty("res")
.GetProperty("error")
.GetProperty("message")
.GetString()); // Throws KeyNotFoundException when `error` or `message` or `res` is not there
3条答案
按热度按时间r1zhe5dt1#
你可以写一个扩展方法,如果找不到属性,它会返回
Nullable<JsonElement>
,如下所示现在可以在代码中应用运算符
?.
:看看这个dotnet fidle,它复制了扩展方法-https://dotnetfiddle.net/S6ntrt的用法
9wbgstp72#
这样比较正确。
9gm1akwq3#
经过测试,我的答案越来越正确... XD