本帖最后由 dreams1981 于 2011-03-29 16:16:48 编辑

解决方案 »

  1.   

    把请求的content-type设为:text/json
    webservice端直接通过HttpRequest,获得该json字符串,反序列化。http://blog.csdn.net/fangxinggood/archive/2011/03/26/6279233.aspx
      

  2.   


    var employee = {"__type":"Employee","FirstName":"X","LastName":"PP","Salary":2000,"FullName":"X PP"}
    $.ajax({
            type: "POST",
            url: "jQueryAjaxTest.asmx/EditEmployee",  
            data: '{"employee":' + employee + '}',
            success: function(msg){
                
            }
        }); jquery 如何向 webservice 发送Employee 这样的复杂数据类型 //jQueryAjaxTest.asmx
    public string EditEmployee(Employee employee)
    {
       //代码处理
       return "OK";
    }
      

  3.   

    asp.net ajax框架是支持 复杂类型数据的参数的namespace ComplexType
    {
    /// <summary>
    /// Summary description for Color
    /// </summary>
    public class Color
    {
    public Color() { } public Color(byte red, byte green, byte blue)
    {
    this.Red = red;
    this.Green = green;
    this.Blue = blue;
    } public byte Red; public byte Green; public byte Blue;
    }
    }
    function ReverseColor()
    {
    // var color = {"Red" : 50, "Green" : 100, "Blue" : 200};
    var color = new ComplexType.Color();
    color.Red = 50;
    color.Green = 100;
    color.Blue = 200;
    ColorService.Reverse(color, onSucceeded);
    }function onSucceeded(result)
    {
    alert(String.format(
    "Red: {0}\nGreen: {1}\nBlue: {2}",
    result.Red,
    result.Green,
    result.Blue));
    }
      

  4.   

    楼上正解,ms ajax可能库大了点,但是序列化都给你做好了,在客户端js你直接传入对象,web service直接取对象,舒服!不然用jquery拟就要自己转,搂住一定要用jquery ajax的话,可以考虑用json2.js来做json对象的转换。
      

  5.   

    json2.js 可以把  
    var employee = {"__type":"Employee","FirstName":"X","LastName":"PP","Salary":2000,"FullName":"X PP"}
    转换成 webscrvice 接受的 Employee 对象吗?
      

  6.   

    json2.js 只能把json转换成javascript对象吧
      

  7.   

    Json.Net
    利用Json来传递吧,Json.Net提供了序列化和反序列化的方法。
      

  8.   

    Asp.Net中使用Json
    一个很好的例子,也是WebService
      

  9.   

    .net有json转换的类你可以研究一下
      

  10.   

    var employee = {"__type":"Employee","FirstName":"X","LastName":"PP","Salary":2000,"FullName":"X PP"}这个就是一个json object,等同于
    var employee = new Object()
    employee.FirstName = "X";
    employee.LastName = "PP";
    employee.Salary = 2000;
    employee.FullName = "X PP";你要把这个object往webservice传,如果在客户端做你就得转成json string,这个json object和string互转的插件,方法有很多,这里我用json2.js
    以搂住例子来说,可以这么做
    ----------------------------------
    var employee = new Object()
    employee.FirstName = "X";
    employee.LastName = "PP";
    employee.Salary = 2000;
    employee.FullName = "X PP";var param = new Object();
    param.Employee = employee;            $.ajax({
                    url: 'webservice.asmx/function',
                    type: 'POST',
                    contentType: "application/json",
                    data: JSON.stringify(param), //这里做object和string的转换
                    success: function (data, textStatus, jXHR) {
           
                        }
                    },
                    error: function (jXHR, textStatus, errorThrown) {                }
                });
      

  11.   

     $.ajax({
                    url:"WebService.asmx/TrueOrFalse",
                    type:"post",
                    contentType: "application/json",
                    data:"{select:1}",
                    dataType:"json",
                    success:function(result){
                       alert(result.d);
                    },
                    error:function(resMsg){alert(resMsg);}
                })    [WebMethod]
        public string TrueOrFalse(string select) 
        {
            if (select == "1")
                return "true";
            else
                return "false";
        }
      

  12.   

    可以当做一个参数传过去,在用json反序列化为你的类型
      

  13.   

    showenxxx 的有个小误var param = new Object();
    param.Employee = employee;
    //应该为参数名不是类型
    param.employee = employee;
      

  14.   

    参数这个地方你只用保证客户端参数名和webservice参数名一样就行了param.abc = employee然后webservice里面一样名字就行
    public string EditEmployee(Employee abc)
    {
       //代码处理
       return "OK";
    }
      

  15.   

    showenxxx 说的是,这个我也知道.指出来只是为了后来参考的人避免走弯路,并不是有意挑刺.