@ObservedV2的类实例目前不支持使用JSON.stringify进行序列化 HarmonyOS 鸿蒙Next
@ObservedV2的类实例目前不支持使用JSON.stringify进行序列化 HarmonyOS 鸿蒙Next @ObservedV2的类实例目前不支持使用JSON.stringify进行序列化。
但是我想拷贝这种类的对象要怎么做???
关于这个是序列化后会有__ob_前缀的问题,可以在序列前替换掉__ob_前缀,demo如下
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() {
// 当点击改变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;
}
}
更多关于@ObservedV2的类实例目前不支持使用JSON.stringify进行序列化 HarmonyOS 鸿蒙Next的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next中,@ObservedV2
的类实例目前不支持使用JSON.stringify
进行序列化。@ObservedV2
是鸿蒙系统中的一个注解,用于标记需要被观察的类,以便在数据变化时自动更新UI。由于@ObservedV2
的设计目的是与鸿蒙的UI框架深度集成,其内部可能包含了一些与UI状态相关的特殊属性或方法,这些属性或方法并不适合通过JSON.stringify
进行序列化。
JSON.stringify
是JavaScript中的一个内置函数,用于将JavaScript对象转换为JSON字符串。它通常只序列化对象中可枚举的自有属性,而忽略函数、Symbol和原型链上的属性。对于@ObservedV2
的类实例,由于其内部可能包含不可枚举的属性或与UI状态相关的特殊数据,JSON.stringify
无法正确处理这些内容,导致序列化失败或结果不符合预期。
如果需要序列化@ObservedV2
的类实例,可以考虑手动提取需要序列化的数据,或者使用其他适合鸿蒙系统的序列化方法。