javascript传递值而不是通过引用传递具有不同的javascript序列化字符串

时间:2015-04-19 16:18:22

标签: javascript jquery asp.net pagemethods javascriptserializer

我使用javascript数组作为javascript对象的属性。每当我修改数组时,它都会影响对象属性,因为它是通过引用传递的。所以我克隆了对象并将其设置为对象属性。这个问题已经解决,但现在每当我尝试序列化对象时,我都会获得不同的序列化字符串。

function Person(name, email, row) {
        this.Name = name;
        this.Email = email;

        var clonedRow = $.extend(true,{}, row);
        this.Row = clonedRow;
    }

    function FnClick() {
        var arr = new Array();
        arr[0] = "aaa";
        arr[1] = "bbb";

        var objPerson = new Person("Pallav", "P@abc.com", arr);
        arr[0] = "xxx";
        arr[1] = "zzz";

        var serializedObj = JSON.stringify(objPerson); //Sys.Serialization.JavaScriptSerializer.serialize(objPerson);
        var UserContext = new Array();
        PageMethods.TestMethod(serializedObj,onSuccess,OnFailure,UserContext);

    }

如果我没有克隆行对象并将其设置为serializedObj字符串

{"名称":" Pallav""电子邮件":" P@abc.com","行&# 34;:[" xxx"," zzz"]}

如果我克隆上面的对象,则serializedObj字符串是

{"名称":" Pallav""电子邮件":" P@abc.com","行&# 34;:{" 0":" AAA"" 1":" BBB"}}

因此,服务器端的反序列化对象是不同的,并且对象的row属性不包含2行,尽管它在序列化字符串中。

我如何克服这个问题?

1 个答案:

答案 0 :(得分:1)

更改

var clonedRow = $.extend(true,{}, row);

var clonedRow = $.extend(true,[], row);

{}是一个对象('关联数组'),而[]是一个简单/平面数组。