HarmonyOS 鸿蒙Next:为什么序列化会更改对象属性名?
HarmonyOS 鸿蒙Next:为什么序列化会更改对象属性名?
如上,属性名是no,序列化之后变成了r8,搞不懂
更多关于HarmonyOS 鸿蒙Next:为什么序列化会更改对象属性名?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
因customer、salesman未知,先暂时去掉,其余字段使用如上图,序列化后看着是正常,no属性未发生变化
更多关于HarmonyOS 鸿蒙Next:为什么序列化会更改对象属性名?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
感谢回复!我今天早上试了一下原先的代码,属性名还是会变;后来我新建了一个文件,把组件的代码复制过来,也是会变;然后我把类名上的@Observed去掉,再运行发现正常了;之后我把代码恢复原状,一切正常,真是奇怪。
//类定义 @Observed export class Task { id: number no:string customer: Customer | undefined customerContact: string customerPhone: string customerAddress: string content: string taskStatus: string salesman:Employee | undefined
constructor(id?: number,no?:string,customer?: Customer, customerContact?: string,customerPhone?: string, customerAddress?: string, content?: string, taskStatus?: string, salesman?: Employee) { this.id = id || 0 this.no = no || ‘’ this.customer = customer || undefined this.customerContact = customerContact || ‘’ this.customerPhone = customerPhone || ‘’ this.customerAddress = customerAddress || ‘’ this.content = content || ‘’ this.taskStatus = taskStatus || ‘’ this.salesman = salesman || undefined } }
//新增按钮执行 onAdd() { //临时显示要提交的数据 promptAction.showDialog({message:JSON.stringify(this.taskDto)}) TaskNetUtils.add(this.taskDto) .then(r => { if (r.code == 20000) { promptAction.showToast({message:r.message}) this.pageInfos.pop() } else { promptAction.showToast({message:r.message}) } }) .catch(reason: Error => { promptAction.showDialog({message:reason.name +’:’+reason.message}) }) }
//post请求 //新增任务 static async add(data: object): Promise<R<object>> { let httpRequest = http.createHttp() let response = await httpRequest.request( baseUrl + ‘/tasks/add’, { method: http.RequestMethod.POST, header: { ‘Content-Type’: ‘application/json; charset=UTF-8’, ‘Authorization’: await AppStorage.get(‘token’), ‘TenantId’: await AppStorage.get(‘tenantId’) }, extraData: data } )
let r: R<object> = new Object as R<object>; if (response.responseCode == 200) { r = JSON.parse(response.result as string) } else { r.code = response.responseCode r.message = response.resultType.toString() } return r }
代码就是这样,更改属性no名后,序列化之后也会变,但始终不是no
一般不会这样,可以提供一下相关代码,然后序列化后属性顺序可能和class中的不一致
一般来说不可能出现这个情况,楼主可以提供下具体的代码
下面我也看到有“no" 字段,这个 r8 有点莫宁奇妙了
在HarmonyOS(鸿蒙)Next中,序列化过程中更改对象属性名通常不是由鸿蒙系统本身直接导致的。序列化是将对象状态转换为可存储或传输的格式的过程,而反序列化则是该过程的逆操作。在序列化与反序列化期间,对象属性名的更改可能由以下几个原因造成:
-
自定义序列化逻辑:如果开发者在对象中实现了自定义的序列化方法(如通过实现特定的接口或重写序列化方法),这些方法可能会故意更改属性名,以满足特定的存储或传输需求。
-
第三方库或框架:使用的序列化库或框架可能有自己的属性名处理策略,如为了节省空间、提高可读性或避免冲突,会自动更改属性名。
-
版本兼容性问题:在不同版本的鸿蒙系统中,如果序列化机制有所变更,或者使用的序列化库版本不同,也可能导致属性名处理方式的差异。
-
配置错误:序列化配置中的错误或不一致也可能导致属性名在序列化过程中被更改。
针对上述问题,建议检查自定义序列化逻辑、使用的序列化库或框架的文档、鸿蒙系统版本以及序列化配置。如果问题依旧没法解决请联系官网客服,官网地址是 https://www.itying.com/category-93-b0.html 。