如何将json字符串转换为c#中的对象,然后动态访问它的属性?

时间:2016-03-08 00:12:19

标签: c# asp.net json asp.net-mvc

我有一个使用jQuery向服务器发送ajax请求的页面。 ajax请求将POST json字符串发送到服务器。

在服务器端,我需要能够将json字符串转换为c#对象。

有一次,我将json字符串转换为一个对象,我需要能够循环它并改变数据。

这是我的json字符串

{'123':{'name': 'VALUE','campaign_id': 'VALUE 2'} }

以下是我尝试将其转换为对象,然后通过它循环的方法。

    try
    {
        string json = Request["data"];

        dynamic records = JsonConvert.DeserializeObject(json);
        string longname = "";

        foreach (var record in records)
        {
            longname += record.name.ToString();
        }

        return longname;

    } catch(Exception e)
    {
        return e.ToString();
    }

但是这给了我这个错误

  

Microsoft.CSharp.RuntimeBinder.RuntimeBinderException:   ' Newtonsoft.Json.Linq.JProperty'不包含的定义   '名称' at myController的CallSite.Target(Closure,CallSite,Object)

如何解决此问题?

已更新 以下是变量在调试器中的外观 enter image description here

3 个答案:

答案 0 :(得分:3)

从调试屏幕截图判断,尝试record.Value.name获取您尝试阅读的值。

虽然JSON数据的属性名称为小写,但反序列化器使用Camel Casing作为生成的dynamic实例中的属性名称,C#属性名称区分大小写。

答案 1 :(得分:0)

如果您要做的就是捕获即将进入C#类的json,并且json是静态的,您可以使用'粘贴JSON作为类'能力。

更多相关信息https://blogs.msdn.microsoft.com/webdev/2012/12/18/paste-json-as-classes-in-asp-net-and-web-tools-2012-2-rc/

答案 2 :(得分:-3)

不太安全的方式,但在紧要关头工作: var myObject = eval('(' + myJSONtext +')');