开始使用
介绍
这个库可以把类的实例序列化成普通的对象,用在 Project Graph 项目的保存和加载。
并且提供了一些装饰器,可以轻松的标注哪些属性和方法需要被序列化,以及如何在反序列化时传入构造函数的参数。
安装
需要先在 tsconfig.json
中启用 experimentalDecorators
和 emitDecoratorMetadata
选项。
npm install @graphif/serializer
# or use pnpm
pnpm add @graphif/serializer
用法
这是一个 Person
类
class Person {
private isGreeting: boolean = false;
constructor(
public name: string,
public age: number,
) {}
greet() {
this.isGreeting = true;
console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
this.isGreeting = false;
}
}
我们想要把 name
和 age
序列化到对象中,但不包括 isGreeting
。
使用 @serializable
装饰器来标注这些属性为可序列化的。
由于技术原因,不能在构造函数的参数中使用
@serializable
装饰器。import { serializable } from "@graphif/serializer";
class Person {
@serializable
public name: string;
@serializable
public age: number;
private isGreeting: boolean = false;
constructor(name: string, age: number) {
this.name = name;
this.age = age;
}
greet() {
this.isGreeting = true;
console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
this.isGreeting = false;
}
}
然后就可以序列化了
import { serialize } from "@graphif/serializer";
const person = new Person("Alice", 25);
const serialized = serialize(person);
console.log(serialized);
输出
{
"_": "Person",
"name": "Alice",
"age": 25
}
你可以用 JSON.stringify
或者 MsgPack 保存到文件中
每个对象中都有一个
_
字段,用来记录类的名称。反序列化也很简单
import { deserialize } from "@graphif/serializer";
const deserialized = deserialize(serialized);
console.log(deserialized);
输出
Person { name: "Alice", age: 25 }