仓颉应用开发之——序列化HashSet和HashMap(17)

一 概述

  • 自定义HashSet和HashMap序列化类
  • HashSet和HashMap序列化示例

二 自定义HashSet和HashMap序列化类

2.1 自定义过程

  • 自定义类实现Hashable、Equatable、Serializable
  • 实现==!=serializedeserialize方法

2.2 示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
class Values <: Hashable & Equatable<Values> & Serializable<Values> {
var m_data: Int64

init(m_data: Int64) {
this.m_data = m_data
}

public func hashCode(): Int64 {
return this.m_data
}

public operator func ==(right: Values): Bool {
let a = (this.m_data == right.m_data)
if (a) { return true } else { return false }
}

public operator func !=(right: Values): Bool {
let a = (this.m_data != right.m_data)
if (a) { return true } else { return false }
}

/* 实现 Serializable 接口的序列化方法 */
public func serialize(): DataModel {
return DataModelStruct().add(field<Int64>("m_data", m_data))
}

/* 实现反序列化方法 */
public static func deserialize(dm: DataModel): Values {
let dms: DataModelStruct = match (dm) {
case data: DataModelStruct => data
case _ => throw Exception("this data is not DataModelStruct")
}
let result = Values(0)
result.m_data = Int64.deserialize(dms.get("m_data"))
return result
}
}

三 HashSet和HashMap序列化示例

3.1 示例

1
2
3
4
5
6
7
8
9
10
protected override func onPageShow() {
let s: HashSet<Values> = HashSet<Values>([Values(3), Values(5), Values(7)])
let seris: DataModel = s.serialize()
Hilog.printInfo("printInfo",seris.toJson().toJsonString())
Hilog.printInfo("printInfo","===========")
let m: HashMap<String, Values> = HashMap<String, Values>([("1", Values(3)), ("2", Values(6)), ("3", Values(9))])
let serim: DataModel = m.serialize()
Hilog.printInfo("printInfo",serim.toJson().toJsonString())

}

3.2 打印结果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[
{
"m_data": 3
},
{
"m_data": 5
},
{
"m_data": 7
}
]
===========
{
"1": {
"m_data": 3
},
"2": {
"m_data": 6
},
"3": {
"m_data": 9
}
}

四 参考

  • HarmonyOS NEXT Developer Beta5仓颉—HashSet 和 HashMap 序列化