HarmonyOS json解析的嵌套对象不走set方法,plainToClass这个方法好像也只对最外层的类有new的效果
示例如下:
import { plainToClass, ClassConstructor } from 'class-transformer'
import "reflect-metadata"
import { BusinessError } from '@kit.BasicServicesKit';
@Observed
class ProductModel{
name:string = ''
private _count: number = 0;
public set count(value: number) {
this._count = value;
this.flagCount = value;//最外层这里是走set方法的
}
public get count(): number {
return this._count;
}
flag: number = 0;
details:roductDetailModel[] = []
flagCount: number = 0;
}
@Observed
class ProductDetailModel{
detailName:string = ''
private _detailCount: number = 0;
public set detailCount(value: number) {
this._detailCount = value;
this.flagCount = value;//嵌套的这里就不走set方法了
}
public get detailCount(): number {
return this._detailCount;
}
flagCount:number = 0
}
function jsonToArray<T>(cls: ClassConstructor<T>, jsonStr: string): Array<T> {
try {
return plainToClass(cls, JSON.parse(jsonStr), { enableImplicitConversion: false, exposeDefaultValues: true }) as Array<T>
} catch (err) {
let error = err as BusinessError;
return []
}
}
@Entry
@Component
struct ProductListView {
jsonString:string = '[{"name":"商品1", "count":"1", "details":[{"detailName":"子商品1", "detailCount":"1"}]},{"name":"商品2", "count":"1", "details":[{"detailName":"子商品2", "detailCount":"1"}]},{"name":"商品3", "count":"1", "details":[{"detailName":"子商品3", "detailCount":"1"}] }]'
@State productList: ProductModel[] = [];
aboutToAppear(): void {
this.productList = jsonToArray(ProductModel, this.jsonString);
}
build() {
Column({space:10}){
ForEach(this.productList,(item:ProductModel)=>{
ProductView({item:item})
})
}.padding(20)
}
}
@Component
struct ProductView {
@ObjectLink item: ProductModel;
build() {
Column(){
Row(){
Text(this.item.name)
Text(`${this.item.count}`)
Text(`${this.item.flagCount}`)//最外层这里走了set方法,所以这里的值变了
Button('数量-1').onClick(()=>{
this.item.count--
})
Button('数量+1').onClick(()=>{
this.item.count++
})
}.width('100%').justifyContent(FlexAlign.SpaceBetween)
Column({space:10}){
ForEach(this.item.details,(detailItem:ProductDetailModel)=>{
ProductDetailsView({parItem:this.item,item:detailItem})
})
}.padding(20)
}
}
}
@Component
struct ProductDetailsView {
@ObjectLink parItem:ProductModel;
@ObjectLink item: ProductDetailModel;
build() {
Column(){
Row(){
Text(this.item.detailName)
Text(`${this.item.detailCount}`)
Text(`${this.item.flagCount}`)//嵌套这里没走set方法,所以这里的值没有发生改变,但是detailCount的值是变了的
Button('数量-1').onClick(()=>{
this.parItem.flag --;
this.item.detailCount--
})
Button('数量+1').onClick(()=>{
this.parItem.flag ++;
this.item.detailCount ++
})
}.width('100%').justifyContent(FlexAlign.SpaceBetween)
}
}
}
json解析的嵌套对象不走set方法,plainToClass这个方法好像也只对最外层的类有new的效果。
HarmonyOS
赞
收藏 0
回答 1
待解决
相关问题
Json 解析后的对象中的自定义方法问题
643浏览 • 1回复 待解决
HarmonyOS 关于解析key不固定json数据方法
497浏览 • 1回复 待解决
HarmonyOS 使用@Entry修饰的组件不走onPageShow方法
333浏览 • 1回复 待解决
HarmonyOS 内嵌在Tabs的组件不走onPageShow方法
522浏览 • 1回复 待解决
new 出来的对象如何获取所属类
2140浏览 • 1回复 待解决
bean类系统自动生成的set方法报语法错误
2024浏览 • 1回复 待解决
HarmonyOS navigation根页面不走onPageShow方法
205浏览 • 1回复 待解决
HarmonyOS JSON解析实体方法无法调用
462浏览 • 1回复 待解决
web组件的controller被注册jsbridge的类对象引用后,导致在类对象方法内部调用h5方法时方法卡死
968浏览 • 1回复 待解决
HarmonyOS关于JSON 转换后对象的方法无法使用问题
1293浏览 • 1回复 待解决
new 出来的对象如何获取所属类,有没有相应的api?
1031浏览 • 1回复 待解决
上下文工具类的方法有哪些?
676浏览 • 1回复 待解决
如何在不修改类,不继承类的情况下为类添加方法?
754浏览 • 1回复 待解决
HarmonyOS Native调用TS侧方法,会报错,TS侧方法也不能获取到对象的变量
896浏览 • 1回复 待解决
json.parse解析出的对象无法判断对象类型
380浏览 • 1回复 待解决
HarmonyOS 如何解析json内容?有没有更多的json类库?
266浏览 • 1回复 待解决
CentOS 7.3 安装 Docker 的最简单方法
2701浏览 • 1回复 待解决
HarmonyOS JSON转换后调用对象方法报错
521浏览 • 1回复 待解决
在用户点击组件a,a的onClick()方法被触发的时候组件b的onClick()方法也被触发,这个HarmonyOS能做到吗?
684浏览 • 1回复 待解决
router进行页面跳转如果传递参数为类对象,跳转后类对象中的方法无法调用,如何传递方法进行使用呢
2373浏览 • 1回复 待解决
鸿蒙WebView 层级 总是处于最外层
7986浏览 • 3回复 待解决
HarmonyOS web组件javaScriptProxy有办法只集成全局的function方法吗,不集成对象
132浏览 • 1回复 待解决
嵌套JSON字符串解析问题
2391浏览 • 1回复 待解决
ArkTS中的类方法是否可以进行方法重载?
1346浏览 • 1回复 待解决
请参考以下demo片段,将每一层的Modul数据都plainToClass一下: