.Net SimpleJson:将 JSON 反序列化为动态对象

问题描述 投票:0回答:3

我正在使用这里的 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 语法访问动态属性?

c# .net json
3个回答
11
投票

嗯,只需阅读 SimpleJson 的源代码即可。 :-) 需要取消注释一行以支持我正在寻找的动态语法。不知道为什么默认情况下不启用此功能。

来自源代码:

// NOTE: uncomment the following line to enable dynamic support.
//#define SIMPLE_JSON_DYNAMIC

4
投票

查看示例,

JsonObject
属性的访问方式就像字典一样。因此,您需要的是
json.foo
,而不是
json["foo"]

实际上,在这里使用

dynamic
会更糟,因为它没有任何动态性:该方法返回
JsonObject
,它根本没有
foo
成员。如果您没有使用
dynamic
,您可能会在编译时收到该错误消息。

如果您查看链接 L.B.提供的,它展示了如何自己实现这个动态功能。


1
投票

>csc /t:库 /d:SIMPLE_JSON_DYNAMIC SimpleJson.cs

© www.soinside.com 2019 - 2024. All rights reserved.