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

6
我将使用这里提供的SimpleJson库:http://simplejson.codeplex.com/ 我想将一个JSON字符串反序列化为一个动态对象,如下所示:
dynamic json = SimpleJson.SimpleJson.DeserializeObject("{\"foo\":\"bar\"}");

var test = json.foo;

反序列化部分工作正常,但调用json.foo会抛出一个RuntimeBinderException异常,错误信息是'SimpleJson.JsonObject'不包含'foo'的定义

我该如何使用SimpleJson反序列化JSON字符串并通过json.foo语法访问动态属性?

3个回答

11

嗯,这只是阅读SimpleJson源代码的问题。:-)需要取消注释一行以支持我要找的动态语法。不确定为什么默认情况下没有启用。

从源代码中:

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

2
这是一个公正的评论,L.B.我无法删除这个问题,所以希望这将作为一个有用的工具,供那些通过NuGet安装SimpleJson并遇到与我相同问题的人使用。 - Johnny Oshika

4
看样例代码,JsonObject的属性可以像字典一样访问。所以不是使用json.foo,而是需要使用json["foo"]
实际上,在这里使用dynamic更加糟糕,因为它与动态无关:该方法返回JsonObject,它根本没有foo成员。如果您没有使用dynamic,则可以在编译时得到该错误信息。
如果您查看L.B.提供的链接,它展示了如何自己实现这个动态功能。

1

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

的翻译是:

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接