Javascript 将对象数组从Ajax函数传递到web服务

Javascript 将对象数组从Ajax函数传递到web服务,javascript,c#,jquery,web-services,parameter-passing,Javascript,C#,Jquery,Web Services,Parameter Passing,我有两个相同对象类型的数组,我正在将它们传递给web服务API。我在将数组传递给web服务之前查看了它,每个数组中都有一个对象。我在API中放置了一个断点,列表为空。不知道我做错了什么 我将DTO定义为: public class AdminDTO { public string fn { get; set; } public string mi { get; set; } public string ln { get; set; } public string

我有两个相同对象类型的数组,我正在将它们传递给web服务API。我在将数组传递给web服务之前查看了它,每个数组中都有一个对象。我在API中放置了一个断点,列表为空。不知道我做错了什么

我将DTO定义为:

public class AdminDTO
{
    public string fn { get; set; }
    public string mi { get; set; }
    public string ln { get; set; }
    public string email { get; set; }
    public string userid{ get; set; }
}
在JS函数中,我填充了两个数组:

// this is done inside a foreach loop
var fn = userData.FirstName;
var mi = userData.Initial;
var ln = userData.LastName;
var email = userData.Email;
var userid = userData.UserID;

//push the object onto the array
admins.push({
    "fn": fn,
    "mi": mi,
    "ln": ln,
    "email": email,
    "userid": userid
});
...
...
// clone admin list for later comparison
currAdmins = admins.slice(0);
在某种程度上,“管理员”是通过用户交互而改变的。删除一些对象并添加一些新对象。我使用下面两个新数组来保存“admins”和“currAdmins”之间的差异:

现在,我试图通过ajax调用将这两个数组传递给web serive。它们都有对象:

function doUpdate(mapping, jsonObjName, adminsToAdd, adminsToRemove) {debugger
    $.ajax({
        url: "../WebService/Blah.asmx/updateSomething",
        type: "POST",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        data: "{" + jsonObjName + ":" + JSON.stringify(mapping) + ", adminRemoveDTO: " + JSON.stringify(adminsToRemove) + ", adminAddDTO:" + JSON.stringify(adminsToAdd) + " }",
    }).done(function (result) {debugger
    ...
    });
Web服务API:

public string UpdateSomething(ProjectDTO projDTO, List<AdminDTO> adminRemoveDTO, List<AdminDTO> adminAddDTO)
{
    // projDTO has stuff in it but both lists are empty
    ....
}
更新

出于测试目的,我使用了原始的数组:“admins”和“currAdmins”,而不是使用(假定)包含差异的数组作为参数传递,并且它工作正常。这告诉我问题出在“.not”操作导致的数组上


另外,当我检查“not”操作的结果时,我注意到它不仅在两个数组之间存在差异,而且还有一个名为“prevObject”的条目,其中包含初始对象集。我认为这有助于有人提出解决方案。

你是正确的,因为
$(a)。not(b)
没有做你想做的事情。jQuery的
not
不做数组。下面是如何实现一个函数来创建一个新数组,该数组排除了
a
中也在
b
中的所有项目:

函数过滤器notin(a、b、键选择器){
const keysFromB=新集合(b.map(keySelector));
返回a.filter(item=>!keysFromB.has(keySelector(item));
}
adminsToAdd=filterNotIn(admins,currAdmins,admin=>admin.userid);

你是正确的,
$(a).not(b)
没有做你想做的事情。jQuery的
not
不做数组。下面是如何实现一个函数来创建一个新数组,该数组排除了
a
中也在
b
中的所有项目:

函数过滤器notin(a、b、键选择器){
const keysFromB=新集合(b.map(keySelector));
返回a.filter(item=>!keysFromB.has(keySelector(item));
}
adminsToAdd=filterNotIn(admins,currAdmins,admin=>admin.userid);
public string UpdateSomething(ProjectDTO projDTO, List<AdminDTO> adminRemoveDTO, List<AdminDTO> adminAddDTO)
{
    // projDTO has stuff in it but both lists are empty
    ....
}
doUpdate(newMapping, "projDTO", adminsToRemove, "adminRemoveDTO", adminsToAdd, "adminAddDTO");
...

function doUpdate(mapping, jsonObjName, adminsToAdd, jsonObjNameAR, adminsToRemove, jsonObjNameAA) {debugger
    $.ajax({
        url: "../WebService/AIR.asmx/updateProject",
        type: "POST",
        contentType: "application/json; charset=utf-8",
        dataType: "json",

        data: "{" + jsonObjName + ":" + JSON.stringify(mapping) + ", " + jsonObjNameAR + ":" + JSON.stringify(adminsToRemove) + ", " + jsonObjNameAA + ":" + JSON.stringify(adminsToAdd) + " }",