我正在使用这里的 SimpleJson 库:https://github.com/mikaelwaltersson/Simple.Json
我想将 JSON 字符串反序列化为动态对象,如下所示:
dynamic json = SimpleJson.SimpleJson.DeserializeObject("{\"foo\":\"bar\"}");
var test = json.foo;
反序列化部分工作正常,但调用 json.foo 会抛出 RuntimeBinderException 并显示错误消息
'SimpleJson.JsonObject' does not contain a definition for 'foo'
。
如何使用 SimpleJson 反序列化 JSON 字符串并使用 json.foo 语法访问动态属性?
嗯,只需阅读 SimpleJson 的源代码即可。 :-) 需要取消注释一行以支持我正在寻找的动态语法。不知道为什么默认情况下不启用此功能。
来自源代码:
// NOTE: uncomment the following line to enable dynamic support.
//#define SIMPLE_JSON_DYNAMIC
查看示例,
JsonObject
属性的访问方式就像字典一样。因此,您需要的是 json.foo
,而不是 json["foo"]
。
实际上,在这里使用
dynamic
会更糟,因为它没有任何动态性:该方法返回 JsonObject
,它根本没有 foo
成员。如果您没有使用 dynamic
,您可能会在编译时收到该错误消息。
如果您查看链接 L.B.提供的,它展示了如何自己实现这个动态功能。
>csc /t:库 /d:SIMPLE_JSON_DYNAMIC SimpleJson.cs