HarmonyOS 鸿蒙Next:涉及到嵌套对象的class-transformer转换(解决JSON.parse()得到的对象丢失实例方法的问题)
HarmonyOS 鸿蒙Next:涉及到嵌套对象的class-transformer转换(解决JSON.parse()得到的对象丢失实例方法的问题)
<markdown _ngcontent-bnd-c237="" class="markdownPreContainer">
1.涉及到的两个依赖:
"dependencies": {
"class-transformer": "^0.5.1",
"reflect-metadata": "^0.1.13" // 用于嵌套对象[@Type](/user/Type)反射
}
<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 4px; right: 8px; font-size: 14px;">复制</button>
2.Bean类:
- 关键:如果使用了[@Type](/user/Type)修饰符,必须 import 'reflect-metadata'
import { Type } from 'class-transformer'
import 'reflect-metadata'
export class Bean {
@Type(() => Data)
data?: Data
}
export class Data {
name?: string
age?: number
getName(): string | undefined {
return this.name
}
}
<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 4px; right: 8px; font-size: 14px;">复制</button>
3.转换:
import { plainToInstance } from 'class-transformer'
<span class="hljs-keyword"><span class="hljs-keyword">let</span></span> json = <span class="hljs-string"><span class="hljs-string">'{"data":{"name":"李四","age":18}}'</span></span>
<span class="hljs-keyword"><span class="hljs-keyword">let</span></span> bean = plainToInstance(Bean, JSON.parse(json))
<span class="hljs-comment"><span class="hljs-comment">// bean.data就是一个实实在在的Data对象,可以调用getName()方法</span></span>
console.log(<span class="hljs-string"><span class="hljs-string">'===='</span></span> + bean.data?.getName())
<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 4px; right: 8px; font-size: 14px;">复制</button>
4.class-transformer更多使用方法可参考:
https://juejin.cn/post/6904890590602330119
参考
https://developer.huawei.com/consumer/cn/forum/topic/0202148667218787203?fid=0109140870620153026
</markdown>关于HarmonyOS 鸿蒙Next:涉及到嵌套对象的class-transformer转换(解决JSON.parse()得到的对象丢失实例方法的问题)的问题,您也可以访问:https://www.itying.com/category-93-b0.html 联系官网客服。
export class Bean<T> {
data?: T
}
找HarmonyOS工作还需要会Flutter的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:https://www.bilibili.com/video/BV1S4411E7LY/?p=17
根据class-transformer文档说明,TypeScript还没有很好的反射能力,所以暂时不支持泛型。所以,以后或许可以考虑使用仓颉来实现该部分功能。
一开始我也遇到了这个问题,也是根据错误信息摸索出来的~
我也是,这个文章太及时了