【问题标题】:.Net SimpleJson: Deserialize JSON to dynamic object.Net SimpleJson:将 JSON 反序列化为动态对象
【发布时间】:2011-10-21 18:33:28
【问题描述】:

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

我想将 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


    【解决方案1】:

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

    来自源代码:

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

    【讨论】:

    • 这是一个中肯的评论,L.B.我无法删除该问题,因此希望这对于通过 NuGet 安装 SimpleJson 并遇到与我相同的问题的其他人来说是一个有用的工件。
    【解决方案2】:

    查看示例,JsonObject 属性的访问方式类似于字典。所以你需要json["foo"],而不是json.foo

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-03-09
        • 1970-01-01
        • 2017-01-28
        • 2012-03-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多