#跟着坚果学鸿蒙#在实际开发中,将类对象与 JSON 数据格式进行互转是一项常见需求,仓颉语言通过 serialization 模块 和 encoding.json 模块 提供了高效的序列化和反序列化机制。通过定义一个类继承实现Serializable接口并重写了 serialize 和 deserialize 方法。serialize 方法将类对象转换为 DataModel 类型,deserialize 方法将 DataModel 类型转换为类对象。

import encoding.json.*
import serialization.serialization.*
import std.collection.*

class Todo <: Serializable<Todo> {
    public var isCheck: Bool = false
    public var title: String = ""

    public func serialize(): DataModel {
        return DataModelStruct()
            .add(field<String>("title", title))
            .add(field<Bool>("isCheck", isCheck))
    }

    public static func deserialize(dm: DataModel): Todo {
        let dms = match (dm) {
            case data: DataModelStruct => data
            case _ => throw Exception("Invalid DataModel type")
        }
        let result = Todo()
        result.title = String.deserialize(dms.get("title"))
        result.isCheck = Bool.deserialize(dms.get("isCheck"))
        return result
    }
}

 在实现serialize重写时,我们需要通过DataModelStruct将需要反序列化的字段通过add方法实现对类型和字段的映射,在重写deserialize时,也是同理。通过以上代码实现了对应数据对象的定义后,我们可以通过以下代码实现将类转为JSON数据

let todo = Todo()
todo.title = '这是标题'
let json = todo.serialize().toJson()
println(json.toString())
// 输出结果:{"title":"这是标题","isCheck":false}

当我们需要对{"title":"这是标题","isCheck":false}这个JSON数据反序列化时,我们可以使用以下代码实现

let data = ##"{"title":"这是标题","isCheck":false}"##
let obj = JsonValue.fromStr(data)
let dm = DataModel.fromJson(obj)
let todo2 = Todo.deserialize(dm)
println(todo2.title) // 输出:这是标题
println(todo2.isCheck) // 输出:false

 

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐