开始使用
介绍
这个库可以把类的实例序列化成普通的对象,用在 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 }