以下是这种情况:我想迭代一个带有输入控件的表,收集值然后将它们提交给ASP.Net PageMethod以将数据保存到数据库中。我有所有的集合,但我得到一个错误,该字符串无法转换为字典。
所以我最终将这样的内容传递给具有以下签名的方法
[
{ 'id': '383840923', 'name': 'fred', 'car':'honda' },
{ 'id': '243', 'name': 'joe', 'car':'honda' },
{ 'id': '4323423', 'name': 'paul', 'car':'honda' },
{ 'id': '38384234230923', 'name': 'ted', 'car':'honda' },
]
public static bool SaveData(Dictionary<string, object>[] items) {...}
我知道如果正确声明我可以来回传递全类对象,ASP.Net将为我处理转换,但我不需要传递整个类,只需要几个属性。
编辑:我正在使用Jquery将帖子发回服务器。
我在这里做错了什么?
答案 0 :(得分:2)
ASP.NET AJAX will automatically deserialize that for you if you use a DTO。服务器端的这类内容与您发送的JSON数组匹配:
public class PeopleAndCarsDTO
{
public int id { get; set; }
public string name { get; set; }
public string car { get; set; }
}
public static bool SaveData(List<PeopleAndCarsDTO> items) {...}
答案 1 :(得分:1)
我弄清楚问题是什么。我在将数组作为$ .ajax调用的一部分发送之前将数据包装在引号中,因此它被视为字符串而不是数组。
$.ajax({
type: "POST",
url: "<%= Response.ApplyAppPathModifier(Request.Path) %>/UpdateAcademicItems",
dataType: "json",
contentType: "application/json; charset=utf-8",
data: "{'items': **'**" + $.toJSON(items) + "**'**}",
success: function(data) {
if(false != data.d) {
alert('we did it');
} else {
alert ('flop');
}
},
error: function() {
alert('Failed to save Program Items');
}
});
答案 2 :(得分:0)
@Jared传递的对象是一个JSON数组。您可以使用json sharp在服务器端处理它。 Here是关于将json数组转换为C#的好文章。