【鸿蒙实战开发】基于class-transformer的对象与JSON相互转换

场景一:方法将普通javascript对象转换为特定类的实例

解决方案

首先我们先定义一个想要指定的特定的类如下:

User里面包含属性id,fistname,lastname,age,data和它的构造方法,还有特定的方法getName和isAdult。

class User { 
  id: number; 
  firstName: string; 
  lastName: string; 
  age: number; 
  date?: Date; 

  constructor() { 
    this.id = 0; 
    this.firstName = ""; 
    this.lastName = ""; 
    this.age = 0; 
  } 

  getName() { 
    return this.firstName + ' ' + this.lastName; 
  } 

  isAdult() { 
    return this.age > 18 && this.age < 60; 
  } 
}

我们在前端处理后端传送过来的数据时,经过反序列化转换的对象全是plain(literal) object(普通(字面量)对象),如下,这里我们手动写一个待转换成特定对象的 JavaScript对象(JSON形式)。

interface UserJson { 
  id: number, 
  firstName: string, 
  lastName: string, 
  age: number, 
  date?: Date 
} 

const userJson:UserJson = { 
  id: 1, 
  firstName: "Johny", 
  lastName: "Cage", 
  age: 27, 
  date: new Date() 
}

使用class-transform可以直接将收到的userJson字面量对象转换为User实例对象,进而可以使用其中的方法。

使用plainToInstance(将字面量转为类实例,支持数组转换)这个接口来进行转化对应实例。

plainToInstance第一个参数传入特定的实体类,第二个传入需要转换的js对象。

export function test1() { 
  // JSON转为对象 
  const user: User = plainToInstance(User,userJson); 
鸿蒙开发环境中,`class-transformer`是一个用于TypeScript的库,它允许你在运行时动态地转换JavaScript对象到或从指定的类结构。当你需要在代码中序列化或反序列化JSON数据,并希望保持类的结构完整时,这个库非常有用。例如,你可以将一个复杂的对象转换JSON字符串,然后在网络请求中发送,接收端再通过`class-transformer`将其还原回原始的对象。 引入`class-transformer`通常涉及到以下几个步骤: 1. 安装依赖:在项目目录下,使用npm或yarn安装`@nestjs/class-transformer`,如果是npm: ``` npm install @nestjs/class-transformer ``` 或者yarn: ```sh yarn add @nestjs/class-transformer ``` 2. 在模块的导入声明中引入`ClassTransformers`装饰器: ```typescript import { ClassTransformer } from '@nestjs/class-transformer'; ``` 3. 使用`@Transform`或`@Transform装饰器`来标记转换函数,例如: ```typescript export class User { @Transform((value) => value.toUpperCase(), { toPlainOnly: true }) name: string; } ``` 4. 在你需要序列化或反序列化的服务或管道中使用`transform`或`plainToClass`方法: ```typescript import { plainToClass } from '@nestjs/class-transformer'; // 序列化 const user = new User({ name: 'John Doe' }); const jsonUser = await this.userService.transform(user); // 反序列化 const receivedJson = ...; // 接收到的JSON数据 const deserializedUser = await this.userService.plainToClass(User, receivedJson); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值