我使用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行,尽管它在序列化字符串中。
我如何克服这个问题?
答案 0 :(得分:1)
更改
var clonedRow = $.extend(true,{}, row);
到
var clonedRow = $.extend(true,[], row);
{}
是一个对象('关联数组'),而[]
是一个简单/平面数组。