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

时间:2011-10-21 18:33:28

标签: c# .net json

我正在使用SimpleJson库:http://simplejson.codeplex.com/

我想将JSON字符串反序列化为动态对象,如下所示:

dynamic json = SimpleJson.SimpleJson.DeserializeObject("{\"foo\":\"bar\"}");

var test = json.foo;

反序列化部分正常工作,但调用json.foo会抛出一个带有错误消息'SimpleJson.JsonObject' does not contain a definition for 'foo'的RuntimeBinderException。

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

3 个答案:

答案 0 :(得分:10)

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

来自源代码:

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

答案 1 :(得分:3)

查看示例,JsonObject属性就像字典一样被访问。因此,您需要json.foo而不是json["foo"]

你在这里使用dynamic实际上更糟糕,因为它没有任何动态:该方法返回JsonObject,它只是没有foo成员。如果您没有使用dynamic,则可能在编译时收到了错误消息。

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

答案 2 :(得分:1)

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