HarmonyOS @ObservedV2的类实例目前不支持使用JSON.stringify进行序列化,现在是否有替代方案

HarmonyOS
1天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
Excelsior_abit

关于序列化后会有__ob_前缀的问题,可以在序列前替换掉__ob_前缀,参考示例如下:

import { plainToClass } from "class-transformer";

@ObservedV2
class Son {
  @Trace age: number = 100;
}

class Father {
  son: Son = new Son();
}

@Entry
@Component
struct Index {
  father: Father = new Father();

  aboutToAppear(): void {
    let a = JSON.stringify(this.father);
    let b: Father = plainToClass(Father, this.father);
    //{"son":{"__ob_age":100}}替换成{"son":{"age":100}}
    console.log(JSON.stringify(convertKeysToCamelCase(this.father)))
  }

  build() {
    Column() {
      // 当点击改变age时,Text组件会刷新
      Text(`${this.father.son.age}`)
        .onClick(() => {
          this.father.son.age++;
        })
    }
  }
}

// utils.ets
export function underscoreToCamelCase(underscoreString: string): string {
  // 捕获__ob_替换成''
  return underscoreString.replace(/(__ob_)/g, (match: string, letter: string): string => {
    console.log(letter)
    return '';
  });
}

export function convertKeysToCamelCase(obj: ESObject): ESObject {
  if (obj && typeof obj === 'object') {
    const newObj: ESObject = {};
    Object.keys(obj).forEach((key) => {
      if (obj.hasOwnProperty(key)) {
        const newKey = underscoreToCamelCase(key);
        newObj[newKey] = convertKeysToCamelCase(obj[key]);
      }
    })
    return newObj;
  } else {
    return obj;
  }
}
分享
微博
QQ
微信
回复
1天前
相关问题
HarmonyOS现在是否deepLink方案
465浏览 • 1回复 待解决
HarmonyOS http请求,json序列化
100浏览 • 1回复 待解决
HarmonyOS 遇到JSON.stringify crash
451浏览 • 1回复 待解决
HarmonyOS JSONmap结构如何序列化
571浏览 • 1回复 待解决
自定义如何实现序列化
2022浏览 • 1回复 待解决
JSON序列化,如何重命名字段?
264浏览 • 1回复 待解决
现在是否支持Webp动图?
2341浏览 • 1回复 待解决