news 2026/7/28 20:55:50

鸿蒙三方库 | harmony-utils之ObjectUtil对象序列化与反序列化详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
鸿蒙三方库 | harmony-utils之ObjectUtil对象序列化与反序列化详解

前言

对象序列化和反序列化是数据持久化和网络传输的基础操作。@pura/harmony-utilsObjectUtil封装了对象序列化方法,支持深拷贝和JSON序列化。本文将从API说明、代码实战、进阶用法、常见问题等多个维度进行全面讲解,帮助开发者快速掌握并应用到实际项目中。

一、ObjectUtil序列化核心API

ObjectUtil提供了以下序列化方法:

方法说明返回类型使用场景
serialize(obj)序列化对象string数据持久化
deserialize(str)反序列化Object数据恢复
toJsonString(obj)对象转JSON字符串string网络传输
fromJsonString(str)JSON字符串转对象Object数据解析

1.1 核心特性

  • 简洁易用:封装复杂逻辑为一行调用,降低使用门槛
  • 类型安全:完整的TypeScript类型定义,编译期即可发现错误
  • 异常处理:内置异常捕获机制,避免运行时崩溃
  • 安全解析:反序列化时安全处理异常数据

1.2 序列化方法对照

方法输入输出说明
toJsonString{name:‘张三’}‘{“name”:“张三”}’对象→字符串
fromJsonString‘{“name”:“张三”}’{name:‘张三’}字符串→对象
serialize复杂对象序列化字符串完整序列化
deserialize序列化字符串原始对象完整反序列化

二、完整使用步骤

2.1 安装依赖

ohpminstall@pura/harmony-utils

2.2 对象序列化

import{ObjectUtil}from'@pura/harmony-utils';Button('对象序列化').width('100%').onClick(()=>{try{letobj={name:'张三',age:25,hobbies:['阅读','编程']};letjson=ObjectUtil.toJsonString(obj);this.result=`对象:${JSON.stringify(obj)}\n序列化:${json}`;}catch(e){this.result='异常: '+e;}})

2.3 对象反序列化

Button('对象反序列化').width('100%').onClick(()=>{try{letjson='{"name":"张三","age":25}';letobj=ObjectUtil.fromJsonString(json);this.result=`JSON:${json}\n反序列化: name=${obj.name}, age=${obj.age}`;}catch(e){this.result='异常: '+e;}})

三、完整页面示例

import{ObjectUtil}from'@pura/harmony-utils';@Entry@Componentstruct SerializeDemo{@Stateresult:string='';build(){Column({space:12}){Button('序列化').width('100%').onClick(()=>{letobj={name:'张三',age:25};this.result=ObjectUtil.toJsonString(obj);});Button('反序列化').width('100%').onClick(()=>{letjson='{"name":"李四","age":30}';letobj=ObjectUtil.fromJsonString(json)asRecord<string,Object>;this.result=`name:${obj['name']}, age:${obj['age']}`;});Text(this.result).fontSize(14).fontColor('#333333')}.padding(16)}}

四、进阶用法

4.1 本地数据持久化

import{ObjectUtil,PreferencesUtil}from'@pura/harmony-utils';asyncfunctionsaveUserInfo(user:UserInfo):Promise<void>{letjson=ObjectUtil.toJsonString(user);awaitPreferencesUtil.putString('userInfo',json);}asyncfunctionloadUserInfo():Promise<UserInfo|null>{letjson=awaitPreferencesUtil.getString('userInfo');returnjson?ObjectUtil.fromJsonString(json)asUserInfo:null;}

4.2 网络请求参数

functionbuildRequestParams(params:Record<string,Object>):string{returnObjectUtil.toJsonString(params);}

五、注意事项

  1. 循环引用:序列化包含循环引用的对象会报错
  2. 函数属性:函数无法被JSON序列化
  3. 特殊值:undefined、Date等特殊值的序列化行为需注意
  4. 初始化依赖:使用前需确保AppUtil.init()已调用
  5. 安全风险:反序列化不受信任的数据可能有安全风险

六、常见问题

Q1: 序列化Date对象后是什么格式?

Date对象序列化后为ISO 8601字符串格式。

Q2: fromJsonString解析失败会怎样?

安全解析会返回null或抛出可控异常,不会导致应用崩溃。

Q3: 可以序列化Map和Set吗?

标准JSON不支持Map/Set,需要先转换为普通对象/数组。

Q4: serialize和toJsonString有什么区别?

serialize可能支持更多类型(如Date、Map),toJsonString是标准JSON序列化。


总结

ObjectUtil的序列化和反序列化方法为数据持久化和网络传输提供了便捷支持。本文详细介绍了核心API、使用步骤、完整示例、进阶用法以及常见问题的解决方案。开发者可以利用这些方法安全地进行对象与字符串的转换。

本文基于@pura/harmony-utils工具库,更多功能请参考官方文档与后续系列文章。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/28 20:51:55

C++ STL replace算法详解:从基础原理到实战应用

1. 项目概述&#xff1a;为什么我们需要replace算法&#xff1f;在 C 的日常开发中&#xff0c;处理字符串或容器内元素的替换操作&#xff0c;就像木匠需要一把趁手的凿子一样基础且频繁。你可能写过这样的循环&#xff1a;遍历一个std::vector或std::string&#xff0c;找到所…

作者头像 李华
网站建设 2026/7/28 20:48:26

Vue+SpringBoot全栈博客开发实战

1. 项目背景与核心价值作为山东大学软件学院创新实训的阶段性成果&#xff0c;这个个人博客项目远不止是一个简单的技术作业。在当今内容为王的时代&#xff0c;个人博客已成为开发者展示技术实力、沉淀知识体系的重要载体。我选择从零搭建博客系统&#xff0c;而非直接使用现成…

作者头像 李华
网站建设 2026/7/28 20:46:53

TPIC7710EVM评估模块深度解析:从汽车电机驱动芯片评估到EPB系统设计

1. 项目概述&#xff1a;从评估板到电子驻车制动系统核心在汽车电子开发领域&#xff0c;尤其是涉及车身控制和安全关键系统时&#xff0c;工程师面临的最大挑战之一是如何在投入大量资源进行整车集成和软件验证之前&#xff0c;对核心执行器驱动芯片进行充分、可靠的评估。电子…

作者头像 李华
网站建设 2026/7/28 20:45:43

AI Agent如何实现长期记忆?

引言在人工智能领域&#xff0c;尤其是大型语言模型&#xff08;LLM&#xff09;驱动的智能体&#xff08;Agent&#xff09;应用中&#xff0c;长期记忆&#xff08;Long-term Memory&#xff09;是实现持续、个性化交互的关键能力。与仅能处理单次对话的短期记忆不同&#xf…

作者头像 李华
网站建设 2026/7/28 20:45:36

评估板使用指南:从核心价值到安全操作与法律边界

1. 评估板&#xff1a;工程师的“乐高积木”与“安全须知”在电子工程的世界里&#xff0c;评估板&#xff08;Evaluation Board&#xff0c; 简称 EVB 或 EVM&#xff09;的地位&#xff0c;有点像乐高积木之于孩子&#xff0c;或者手术刀之于医生。它不是一个可以直接卖给消费…

作者头像 李华
网站建设 2026/7/28 20:42:53

惊!My Eicher 车队管理系统 API 漏洞,可致账户接管与大量数据泄露

利用沃尔沃/依维柯的车队管理平台控制所有用户和车辆2026 年 7 月 27 日消息&#xff0c;VE 商用车公司是沃尔沃集团和依维柯汽车的合资企业&#xff0c;为印度商用车客户打造并维护了一个名为 My Eicher 的车队管理系统。官方称&#xff0c;“My Eicher 是一款专为商用车车主、…

作者头像 李华