【问题标题】:How to convert json string to an object in c#, then access it's property dynamiclly?如何将json字符串转换为c#中的对象,然后动态访问其属性?
【发布时间】:2016-03-08 00:12:19
【问题描述】:

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

在服务器端,我需要能够将 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”不包含定义 'name' at CallSite.Target(Closure , CallSite , Object ) at myController

我该如何解决这个问题?

更新 这是变量在调试器中的外观

【问题讨论】:

  • 为什么不直接绑定到模型(所有这些都由 MVC 开箱即用地处理)?您需要显示控制器方法的签名、您尝试绑定的模型和 ajax 代码。
  • 我该怎么做? json 字符串将有一个记录列表
  • 重复一遍 - 您需要显示控制器方法的签名、您尝试绑定的模型和 ajax 代码
  • 我实际上需要它是动态的,因为我需要更改数据。如何从记录对象访问属性?
  • 您当前的示例不需要动态。你为什么把jQuery放在标题里?

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


【解决方案1】:

从调试截图来看,尝试record.Value.name获取你想要读取的值。

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

【讨论】:

    【解决方案2】:

    如果您只想捕获传入 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/

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 看问题。尽管标题具有误导性,但似乎他正在转换服务器上的对象。
      猜你喜欢
      • 1970-01-01
      • 2021-06-12
      • 2014-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-27
      相关资源
      最近更新 更多