我有一个动态JSON字符串(结构可以根据服务器发送的内容而变化)。我使用Newstonsoft.Json
作为动态ExpandoObject来实现它
dynamic jsonMeta = JsonConvert.DeserializeObject<ExpandoObject>(jsonScript, new ExpandoObjectConverter());
我使用dynamic ExpandoObject
的原因是因为它应该允许我灵活地使用非固定的JSON结构。
我正在尝试访问一个名为(例如)的属性。plot)可能存在也可能不存在:
string plot = jsonMeta.plot
我面临的问题是,当plot
不存在于JSON字符串中时,我希望它返回一个'null',但它却抛出了一个异常:
“System.Dynamic.ExpandoObject”不包含“plot”的定义Microsoft.CSharp.RuntimeBinder.RuntimeBinderException
当它遇到一个不存在的属性时,我如何让它返回一个null
而不是抛出一个异常?
我宁愿不尝试检查属性的存在,因为它会导致极端的代码膨胀,因为我的目标是使用像jsonMeta.plot?.name?.text
这样的嵌套空条件运算符
是否可以覆盖或更改ExpandoObject的行为?如果有一个更干净的方法来处理这种情况,我愿意考虑它(不绑定到ExpandoObject或Newtonsoft.Json)。
编辑:有人将其标记为duplicate of this question。这是完全不同的,它不是关于如何匿名化JSON,而是关于如何在访问匿名化JSON中的属性时(使用ExpandoObject或任何其他方法)* 不获得异常 *。
1条答案
按热度按时间rlcwz9us1#
ExpandoObject实际上只是一个字典。所以你可以用字典代替。
因此,您可以简单地检查现有的密钥,并基于此执行您的工作。