HarmonyOS 鸿蒙Next:涉及到嵌套对象的class-transformer转换(解决JSON.parse()得到的对象丢失实例方法的问题)

发布于 1周前 作者 itying888 来自 鸿蒙OS

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 联系官网客服。
9 回复
给力,好用!!
非常赞👍🏻
很好,收藏学习下!
那涉及到泛型怎么转换

export class Bean<T> {

data?: T

}

找HarmonyOS工作还需要会Flutter的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:https://www.bilibili.com/video/BV1S4411E7LY/?p=17

根据class-transformer文档说明,TypeScript还没有很好的反射能力,所以暂时不支持泛型。所以,以后或许可以考虑使用仓颉来实现该部分功能。

感觉分享,尤其是那句必须导入 import 'reflect-metadata'  我就是看着class-transformer的官方文档上没有导入,我也没导入  然后[@Type](/user/Type) 运行就报错 

一开始我也遇到了这个问题,也是根据错误信息摸索出来的~

我也是,这个文章太及时了

回到顶部