无法将json数组反序列化为c#列表
有这么多json序列化/反序列化选项,所以我不确定使用哪一个是正确的,以及为什么有这么多选项来做看起来相同的事情。我见过JsonConvert、JsonSerializer、JavaScriptSerializer和其他几个 正在寻找有关将json数组正确反序列化为复杂对象的c#列表的帮助 JQUERY:无法将json数组反序列化为c#列表,c#,javascript,jquery,ajax,asp.net-mvc,C#,Javascript,Jquery,Ajax,Asp.net Mvc,有这么多json序列化/反序列化选项,所以我不确定使用哪一个是正确的,以及为什么有这么多选项来做看起来相同的事情。我见过JsonConvert、JsonSerializer、JavaScriptSerializer和其他几个 正在寻找有关将json数组正确反序列化为复杂对象的c#列表的帮助 JQUERY: var users = []; for (var i = 0; i < response.length; i++) { var u =
var users = [];
for (var i = 0; i < response.length; i++)
{
var u =
{
Id: response[i].id,
UserName: response[i].username,
FirstName: response[i].first_name,
LastName: response[i].last_name
};
users[i] = u;
}
var ul = JSON.stringify({ 'userlist': users});
$.ajax({
type: "POST",
url: "/myurl/addusers",
data: { 'userlist': ul },
dataType: "json",
success: function (response) {
},
error: function (xhr, status, error) {
}
});
var用户=[];
对于(变量i=0;i
C#(这不起作用):
[HttpPost]
公共操作结果AddUsers(字符串用户列表)
{
JavaScriptSerializer ser=新的JavaScriptSerializer();
var users=ser.Deserialize(userlist);
...
}
[可序列化]
公共类用户
{
公共字符串Id{get;set;}
公共字符串用户名{get;set;}
公共字符串名{get;set;}
公共字符串LastName{get;set;}
}
尝试以下方法:
var ul = JSON.stringify({ 'userlist': users});
$.ajax({
type: "POST",
url: "/myurl/addusers",
data: ul ,
content-Type: 'application/json; charset=utf-8',
dataType: "json",
success: function (response) {
},
error: function (xhr, status, error) {
}
});
您已经在jsonul
中设置了userlist
,因此只需将其直接指定给数据,而无需再次将其包装在userlist
上,还可以设置contentType内容类型:'application/json;在ajax设置中,charset=utf-8'
此外,在您的行动中,只需使用:
public ActionResult AddUsers(List<User> userlist)
{
//no need to do JavaScriptSerializer
public ActionResult AddUsers(List userlist)
{
//无需使用JavaScriptSerializer
尝试以下方法:
var ul = JSON.stringify({ 'userlist': users});
$.ajax({
type: "POST",
url: "/myurl/addusers",
data: ul ,
content-Type: 'application/json; charset=utf-8',
dataType: "json",
success: function (response) {
},
error: function (xhr, status, error) {
}
});
您已经在jsonul
中设置了userlist
,因此只需将其直接指定给数据,而无需将其包装在userlist
上,再次在ajax设置中设置contentTypecontent-Type:'application/json;charset=utf-8'
此外,在您的行动中,只需使用:
public ActionResult AddUsers(List<User> userlist)
{
//no need to do JavaScriptSerializer
public ActionResult AddUsers(List userlist)
{
//无需使用JavaScriptSerializer
更改您的操作以接受用户列表,model binder将处理其余部分,如下所示:
[HttpPost]
public ActionResult AddUsers(List<User> users)
{
//use the
}
将您的操作更改为接受用户列表,model binder将处理其余部分,如下所示:
[HttpPost]
public ActionResult AddUsers(List<User> users)
{
//use the
}
我不确定它是否/如何适合MVC,但.NET Web API已经为您提供了所有这些功能。您应该研究如何利用这些功能。我不确定它是否/如何适合MVC,但.NET Web API已经为您提供了所有这些功能。您应该研究如何利用这些功能。这实际上是我最初拥有的功能。不过,我又尝试了一次,当AddUsers被调用时,我的用户列表中的计数为0。顺便说一句,感谢您指出jquery中的错误。我已经纠正了这个错误。@Prabhu检查您的网络控制台(chrome)在浏览器中查看数据如何输出。同时添加
contentType:'application/json;charset=utf-8'
,请参阅我的update@Prabhu不客气。我没有注意到最初在您的代码中,后来我意识到您没有注意到…:)这实际上是我最初拥有的。我再次尝试了这一点,但是,我的userlis中的计数为0t当AddUsers被调用时。顺便说一句,感谢您指出jquery中的错误。我已经纠正了这个错误。@Prabhu检查您的网络控制台(chrome)在浏览器中查看数据如何输出。同时添加contentType:'application/json;charset=utf-8'
,请参阅我的update@Prabhu不客气。我没有注意到最初在您的代码中,后来我意识到您错过了…:)谢谢。我也尝试了这个(类似于PSL的方法),但是当调用AddUsers时,我仍然看到0个项目的计数,即使ul中有一个项目。谢谢。我也尝试了这个方法(类似于PSL的方法),但是当调用AddUsers时,我仍然看到0个项目的计数,即使ul中有一个项目。