2

我有 -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 变量一次只有一个变量。由于我们没有属性,如何有效地读取所有超过 10 条记录,但只能通过索引器读取 (details["customerName"])。

4

4 回答 4

3

试试这个:

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;
}
于 2012-07-12T10:59:55.450 回答
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);
于 2012-07-12T11:00:14.010 回答
1

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

于 2012-07-12T10:59:38.900 回答
1

有一个非常灵活的 json 框架 ( JSON.NET ) 可以帮助解决这个问题,如果您使用 JSON http://json.codeplex.com/进行大量工作,则值得考虑定义

于 2012-07-12T11:11:53.690 回答