serialize/deserialize Xodus-dnq 实体的正确方法

A proper way to serialize/deserialize Xodus-dnq entity

例如 - 我有这个实体:

class XdUser(entity: Entity) : XdEntity(entity) {

    var someName by xdStringProp()
    var someNumber by xdIntProp()
}

serialize/deserialize from/to json 的正确方法是什么? 我必须创建数据 class 来复制我实体的字段,然后将值传播到 XdUser?还是有别的办法?

将 XdUser 序列化为 JSON 您应该确保序列化程序不会处理 XdUser#entity 和其他 public 链接,它们会暴露大量不必要的数据。反序列化带来了另一个问题,因为应该告知反序列化器如何使用构造函数 XdUser(entity: Entity).

从 json 实例化 class

从我的预期更好的选择是有另一层休息API。它带来了控制公开数据量、控制权限(如果您有权限)以及实体更新方式的能力。

休息api级别是这样实现的:

open class EntityVO<T: XdEntity>(xdId: String?) {
}

class UserVO(xdId: String?): EntityVO<XdUser>(xdId: String?) {

    var someName by delegateTo(XdUser::someName)
    var someNumber by delegateTo(XdUser::someNumber)

}

delegateTo 应该提供委托,它将通过 xdId 查找 XdUser 并使用指定的 XdUser 属性 执行 get/set 值。对于link/links,逻辑会更复杂,但想法可以相同。