将JS数组={}发送到C#(WebMethod)

将JS数组={}发送到C#(WebMethod),c#,javascript,asp.net,json,C#,Javascript,Asp.net,Json,实际上,我在JS端声明了一个数组,如下所示: var benefArray = {}; var benefCount = 0; var benefNome = $('#txtBenefNome').val(); var benefDataNasc = $('#txtBenefDataNasc').val(); var benefGrauParent = $('#txtBenefGrauParent').val(); benefCount++; benefArray[benefCo

实际上,我在JS端声明了一个数组,如下所示:

 var benefArray = {};
 var benefCount = 0;
 var benefNome = $('#txtBenefNome').val();
 var benefDataNasc = $('#txtBenefDataNasc').val();
 var benefGrauParent = $('#txtBenefGrauParent').val();

 benefCount++;
 benefArray[benefCount] = new Array(benefNome, benefDataNasc, benefGrauParent);

              //Ajax Sender
            function sendAjax(url, parametros, sucesso) {
                $.ajax({
                    type: "POST",
                    url: url,
                    data: parametros,
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    success: sucesso
                });
            };

 sendAjax("Client.aspx/AddClient", "{benefArray: \"" + benefArray + "\"}",
 function (msg) {
                    var retorno = msg.d;
                    alert(retorno);
                });
在我的C#WebMethod方面,我有:

    [WebMethod]
    public static string AddClient(object benefArray)
    {
        var t = benefArray;
    }
我试图从Javascript中获取这些值,我必须做什么?
对此有任何见解都将不胜感激!谢谢

首先定义一个模型,该模型将表示您正在使用的数据,这样您就可以使用强类型,并摆脱
AddClient方法中的
对象
丑陋:

public class Benef
{
    public string Nome { get; set; }
    public string DataNasc { get; set; }
    public string GrauParent { get; set; }
}
然后让您的web方法获取此模型的数组:

[WebMethod]
public static string AddClient(Benef[] benefs)
{
    // TODO: process ...

    // by the way as a result you could also return a strongly 
    // typed model and not only strings 
    // which could be easily manipulated on the client side
    return "some result"; 
}
在客户端上,您可以定义一组参数:

var parameters = { 
    benefs: [
        {
            Nome: $('#txtBenefNome').val(),
            DataNasc: $('#txtBenefDataNasc').val(),
            GrauParent: $('#txtBenefGrauParent').val()
        }
    ]
};

$.ajax({
    type: 'POST',
    url: 'Client.aspx/AddClient',
    data: JSON.stringify(parameters),
    contentType: 'application/json; charset=utf-8',
    dataType: 'json',
    success: function(result) {
        alert(result.d);
    }
});

就我在这里使用的
JSON.stringify
方法而言,它是现代浏览器中固有的。但是,如果您打算支持较旧的浏览器,建议将脚本包含到页面中。

如果您不想设置类,也可以这样做

[WebMethod]
public static string AddClient(Hashtable[] benefs)
{       
    var n = benefs["Nome"].ToString();
    return "some result"; 
}

其他类型需要.ToString()然后Parse()。

benefArray
不是数组。它是一个物体。您分配给它的每个成员(
benefArray[benefCount]=newarray(benefNome、benefDataNasc、benefgraupent);
)都是一个数组。诚然,这种区别在JavaScript中有点微妙,但序列化程序在做出序列化决策时会倾向于查看类型,以确定它是否是数组,因此这种区别可能会对您所做的工作产生影响……感谢Darin的解决方案!我将尝试这样做,并给您一个反馈。@FelipeKM,当然您可以,在客户端简单地这样做:
var参数={benefs:[{…},{…},{…},{…}]}你显然会用每个好处的细节来代替
。@FelipeKM,我明白你的意思了。您可以
push
将新元素推送到数组:
parameters.benefs.push({Nome:'foo',DataNasc:'bar',GrauParent:'baz'})
@FelipeKM,
.push
方法允许您将元素添加到现有数组中。感谢您提供完整的答案,并为该过程的所有部分提供完整的代码示例。我看过很多帖子,其中一部分只是被忽略了,没有解释。