【问题标题】:How to handle json object in codebehind如何在代码隐藏中处理 json 对象
【发布时间】:2012-07-12 10:49:20
【问题描述】:

我有 - var JsonObj = [];,我将一些数据推入其中并使用 JQuery.ajax() 方法将其发送到代码隐藏。我能够接收具有像这样的参数的方法

[WebMethod]
public static void SaveInfo(List<Object> userEnteredDetails)
{
}

然后我遍历集合以获取类似这样的数据,

foreach (object item in userEnteredDetails)
{
Dictionary<string, object> details = item as  Dictionary<string, object>;

string name = details["customerName"] as string;
}

这里的问题是,我收到了超过 10 件收藏品。所以我无法在上面的 for 循环中读取另一个属性。像这样的,

foreach (object item in userEnteredDetails)
{
Dictionary<string, object> details = item as  Dictionary<string, object>;

string name = details["customerName"] as string;
string city= details["city"] as string;
}

第一次 city 会抛出一个错误,下次 customername 会抛出一个错误。因为 item 变量一次只有一个变量。由于我们没有属性,但只能通过索引器(details["customerName"])读取,如何有效地读取所有超过 10 条记录。

【问题讨论】:

  • 您使用object而不是像PersonEmployee等自定义强类型DTO有什么特别的原因吗?跨度>

标签: c# asp.net json jquery


【解决方案1】:

试试这个:

string name = String.Empty;
string city = String.Empty;
foreach (object item in userEnteredDetails)
{
 Dictionary<string, object> details = item as  Dictionary<string, object>;
if (details.ContainsKey("customerName"))
 name = details["customerName"] as string;
if (details.ContainsKey("city"))
 city= details["city"] as string;
}

【讨论】:

    【解决方案2】:

    您可以枚举详细字典。

    foreach(var kvp in details)
      {
    // do something with kvp.Key and kvp.Value
      }
    

    编辑: 要首先获取一个合并的详细信息字典,您可以尝试以下操作:

    var details = list.Select(item => item as Dictionary<string, object>).SelectMany(d => d).ToDictionary(kvp => kvp.Key, kvp => kvp.Value);
    

    【讨论】:

    • 如果您希望将所有数据合并到一个字典中,您可以先将各个项目合并到一个字典中。
    【解决方案3】:

    你可以有一个类型,其中的字段映射到对象列表。在使 ajax 调用字符串化 json 对象时。在您的网络方法中,将其作为字符串接收。使用 Json Deserializer 并将其反序列化为您创建的类型。

    【讨论】:

      【解决方案4】:

      有一个非常灵活的 json 框架 (JSON.NET) 可以帮助解决这个问题,如果您使用 JSON http://json.codeplex.com/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-07-13
        • 1970-01-01
        • 2018-12-23
        • 1970-01-01
        • 2015-05-11
        • 2010-12-14
        • 2013-05-24
        • 2019-10-25
        相关资源
        最近更新 更多