HarmonyOS 使用class-transformer和@Expose注解在嵌套对象场景下,如何实现序列化与反序列化。

HarmonyOS
2024-12-28 07:30:31
1.0w浏览
收藏 0
回答 1
回答 1
按赞同
/
按时间
Heiang

1、下载class-transform

ohpm install class-transformer 
ohpm install reflect-metadata 
  • 1.
  • 2.

2、导入包

import { classToPlain, Expose, plainToClass } from 'class-transformer'; 
import 'reflect-metadata'; 
  • 1.
  • 2.

3、编写代码

class MyClass {
  @Expose({ name: 'auth-type' })
  authType: number = 1;
  meta: AuthorMeta = new AuthorMeta();
}

class AuthorMeta {
  @Expose({ name: 'focus_count' })
  focusCount: number = 0;
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.

4、测试

import { classToPlain, Expose, plainToClass } from 'class-transformer';
import 'reflect-metadata';

@Entry
@Component
struct Test6 {
  build() {
    Column(){
      Button('验证1').onClick((event: ClickEvent) => {
        let myClass: MyClass = new MyClass();
        myClass.authType = 1;

        let serializedData = classToPlain(myClass);
        let jsonStr: string = JSON.stringify(serializedData)
        console.log(jsonStr);

        let myClass1: MyClass = JSON.parse(jsonStr)
        let myDataObject = plainToClass(MyClass, myClass1);
        console.log("authType is " + myDataObject.authType);
        let myAuthMeta = plainToClass(AuthorMeta, myDataObject.meta)
        console.log("focusCount is " + myAuthMeta.focusCount);
      })
      Button('验证2').onClick((event: ClickEvent) => {
        let result = plainToClass(MyClass, JSON.parse("{\"auth-type\":3,\"meta\":{\"focus_count\":333}}"))
        let result1 = plainToClass(AuthorMeta, result.meta)
        console.log("focusCount is "+result1.focusCount);
      })
    }
  }
}

class MyClass {
  @Expose({ name: 'auth-type' })
  authType: number = 1;
  meta: AuthorMeta = new AuthorMeta();
}

class AuthorMeta {
  @Expose({ name: 'focus_count' })
  focusCount: number = 0;
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
分享
微博
QQ
微信
回复
2024-12-28 10:20:49


相关问题
JSON反序列化如何重命名字段?
827浏览 • 1回复 待解决
求大佬告知如何序列化对象
1571浏览 • 1回复 待解决
HarmonyOS Map 序列化问题
669浏览 • 1回复 待解决
自定义类如何实现序列化
2533浏览 • 1回复 待解决
HarmonyOS http请求,json序列化
763浏览 • 1回复 待解决
HarmonyOS JSON中的map结构如何序列化
1219浏览 • 1回复 待解决
有谁知道 task 参数无法序列化
2062浏览 • 1回复 待解决
HarmonyOS 有没有类似protobuf的序列化
470浏览 • 1回复 待解决