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

鸿蒙三方库 | harmony-utils之ObjectUtil对象序列化与反序列化详解 前言对象序列化和反序列化是数据持久化和网络传输的基础操作。pura/harmony-utils的ObjectUtil封装了对象序列化方法支持深拷贝和JSON序列化。本文将从API说明、代码实战、进阶用法、常见问题等多个维度进行全面讲解帮助开发者快速掌握并应用到实际项目中。一、ObjectUtil序列化核心APIObjectUtil提供了以下序列化方法方法说明返回类型使用场景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 安装依赖ohpminstallpura/harmony-utils2.2 对象序列化import{ObjectUtil}frompura/harmony-utils;Button(对象序列化).width(100%).onClick((){try{letobj{name:张三,age:25,hobbies:[阅读,编程]};letjsonObjectUtil.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};letobjObjectUtil.fromJsonString(json);this.resultJSON:${json}\n反序列化: name${obj.name}, age${obj.age};}catch(e){this.result异常: e;}})三、完整页面示例import{ObjectUtil}frompura/harmony-utils;EntryComponentstruct SerializeDemo{Stateresult:string;build(){Column({space:12}){Button(序列化).width(100%).onClick((){letobj{name:张三,age:25};this.resultObjectUtil.toJsonString(obj);});Button(反序列化).width(100%).onClick((){letjson{name:李四,age:30};letobjObjectUtil.fromJsonString(json)asRecordstring,Object;this.resultname:${obj[name]}, age:${obj[age]};});Text(this.result).fontSize(14).fontColor(#333333)}.padding(16)}}四、进阶用法4.1 本地数据持久化import{ObjectUtil,PreferencesUtil}frompura/harmony-utils;asyncfunctionsaveUserInfo(user:UserInfo):Promisevoid{letjsonObjectUtil.toJsonString(user);awaitPreferencesUtil.putString(userInfo,json);}asyncfunctionloadUserInfo():PromiseUserInfo|null{letjsonawaitPreferencesUtil.getString(userInfo);returnjson?ObjectUtil.fromJsonString(json)asUserInfo:null;}4.2 网络请求参数functionbuildRequestParams(params:Recordstring,Object):string{returnObjectUtil.toJsonString(params);}五、注意事项循环引用序列化包含循环引用的对象会报错函数属性函数无法被JSON序列化特殊值undefined、Date等特殊值的序列化行为需注意初始化依赖使用前需确保AppUtil.init()已调用安全风险反序列化不受信任的数据可能有安全风险六、常见问题Q1: 序列化Date对象后是什么格式Date对象序列化后为ISO 8601字符串格式。Q2: fromJsonString解析失败会怎样安全解析会返回null或抛出可控异常不会导致应用崩溃。Q3: 可以序列化Map和Set吗标准JSON不支持Map/Set需要先转换为普通对象/数组。Q4: serialize和toJsonString有什么区别serialize可能支持更多类型如Date、MaptoJsonString是标准JSON序列化。总结ObjectUtil的序列化和反序列化方法为数据持久化和网络传输提供了便捷支持。本文详细介绍了核心API、使用步骤、完整示例、进阶用法以及常见问题的解决方案。开发者可以利用这些方法安全地进行对象与字符串的转换。本文基于pura/harmony-utils工具库更多功能请参考官方文档与后续系列文章。