golang 用 Unmarshal 和 marshal 函数就行了。
仓颉要写这个一大堆,有人反馈这个写法跟 C++有的一拼,但是性能不如 java,go ,c++。
希望官方能优化一下,对初学者友好。
下面是官网的例子。
import serialization.serialization.*
import encoding.json.*
class Person <: Serializable<Person> {
var name: String = ""
var age: Int64 = 0
var loc: Option<Location> = Option<Location>.None
public func serialize(): DataModel {
return DataModelStruct().add(field<String>("name", name)).add(field<Int64>("age", age)).add(field<Option<Location>>("loc", loc))
}
public static func deserialize(dm: DataModel): Person {
var dms = match (dm) {
case data: DataModelStruct => data
case _ => throw Exception("this data is not DataModelStruct")
}
var result = Person()
result.name = String.deserialize(dms.get("name"))
result.age = Int64.deserialize(dms.get("age"))
result.loc = Option<Location>.deserialize(dms.get("loc"))
return result
}
}
class Location <: Serializable<Location>{
var country: String = ""
var province: String = ""
public func serialize(): DataModel {
return DataModelStruct().add(field<String>("country", country)).add(field<String>("province", province))
}
public static func deserialize(dm: DataModel): Location {
var dms = match (dm) {
case data: DataModelStruct => data
case _ => throw Exception("this data is not DataModelStruct")
}
var result = Location()
result.country = String.deserialize(dms.get("country"))
result.province = String.deserialize(dms.get("province"))
return result
}
}
main() {
var js = ##"{
"name": "A",
"age": 30,
"loc": {
"country": "China",
"province": "Beijing"
}
}"##
var jv = JsonValue.fromStr(js)
var dm = DataModel.fromJson(jv)
var A = Person.deserialize(dm)
println("name == ${A.name}")
println("age == ${A.age}")
println("country == ${A.loc.getOrThrow().country}")
println("province == ${A.loc.getOrThrow().province}")
println("====================") // 上部分实现从 JSON 字符串到自定义类型的转换,下部分实现从自定义类型到 JSON 字符串的转换。
dm = A.serialize()
var jo = dm.toJson().asObject()
println(jo.toJsonString())
0
}
1
DefoliationM 2 天前 via Android
ts 就这样吧,感觉还好。go 的那个也挺麻烦的。
|
![]() |
2
xausky 2 天前
和 dart 很像
|
![]() |
3
flyqie 2 天前 via Android
啥业务非得用这个语言啊...
难道是国产化要求用了? |
4
Tomatopotato 1 天前
我认为开发 cj 的那群人应该不会上这个论坛 (笑
|
![]() |
5
InkStone 1 天前
看了下都是 trivial 的字段映射。定制比较多的序列化和反序列化也就算了,这种 trivial 的就不能直接自动生成么
|
7
wuxilaoshiren 1 天前
@wsseo 学了可以干嘛 专门干国产化的嘛
|
8
wsseo OP @wuxilaoshiren 可以做后端开发,也可以鸿蒙 APP 开发
|
9
csfreshman 1 天前
还真有人学这个呀,这个赛道你们卷去吧,哈哈哈
|
10
sthwrong 1 天前
看起来就是要自己实现序列化反序列化接口,第三方做个序列化库,用注解生成序列化接口的实现也许可以。
|
![]() |
11
ns09005264 1 天前
这个写法就像是仓颉没有注解和反射功能。
|