JSON 没有数据类型的功能。您只能序列化字符串、数字、对象、数组和布尔值(以及null
)
您可以创建自己的toJson
方法,只传递真正需要序列化的数据:
Person.prototype.toJson = function() {
return JSON.stringify({age: this.age});
};
与反序列化类似:
Person.fromJson = function(json) {
var data = JSON.parse(json); // Parsing the json string.
return new Person(data.age);
};
用法是:
var serialize = p1.toJson();
var _p1 = Person.fromJson(serialize);
alert("Is old: " + _p1.isOld());
为了减少工作量,您可以考虑将每个需要序列化的所有数据存储在一个特殊的“data”属性中Person
实例。例如:
function Person(age) {
this.data = {
age: age
};
this.isOld = function (){
return this.data.age > 60 ? true : false;
}
}
那么序列化和反序列化只是调用JSON.stringify(this.data)
并设置实例的数据将是instance.data = JSON.parse(json)
.
这将保持toJson
and fromJson
方法很简单,但你必须调整你的其他功能。
边注:
您应该添加isOld
函数原型的方法:
Person.prototype.isOld = function() {}
否则,每个实例都有它自己的该函数的实例,这也会增加内存。