首先,这是自定义序列化/反序列化的简单示例:
function Person( name, sex, age ) { this.name = name; this.sex = sex; this.age = age;}Person.prototype.serialize = function () { var obj = this; return '{ ' + Object.getOwnPropertyNames( this ).map( function ( key ) { var value = obj[key]; if ( typeof value === 'string' ) { value = '"' + value + '"'; } return '"' + key + '": ' + value; }).join( ', ' ) + ' }';};Person.deserialize = function ( input ) { var obj = JSON.parse( input ); return new Person( obj.name, obj.sex, obj.age );};用法:
首先,我们创建一个新的实例对象:
var person = new Person( 'John', 'male', 25 );
现在,我们使用以下
Person.prototype.serialize方法将该对象序列化为字符串:
var string = person.serialize();
这将使用以下字符串:
{ "name": "John", "sex": "male", "age": 25 }最后,我们使用
Person.deserialize静态方法反序列化该字符串:
var person2 = Person.deserialize( string );
现在,
person2是的实例,
Person并且包含与原始
person实例相同的属性值。
现场演示: http :
//jsfiddle.net/VMqQN/
现在,尽管
Person.deserialize在任何情况下都需要静态方法(它在
JSON.parse内部使用,并调用
Person构造方法以初始化新实例),但
Person.prototype.serialize另一方面,仅在内置
JSON.stringify静态方法不足时才需要该方法。
在我上面的示例中,
var string = JSON.stringify( person)也可以完成这项工作,因此不需要自定义序列化机制。请参阅此处:http :
//jsfiddle.net/VMqQN/1/但是,您的情况更为复杂,因此需要定义一个自定义序列化函数。



