假如 A中有一个Pointer对象B,序列化之后获取不到B的属性。

我是按照官网的「序列化反序列化」的教程处理带有Pointer对象的LCObject的,是我调用的有问题嘛?还是SDK本身没有实现,如果没有实现,大家有什么好的方案没?

谢谢。

---- UPDATE ----

环境

  • Flutter : 2.2.3
  • leancloud_storage : 0.7.2

AVOS数据结构

  • Product:name, amount, category(pointer), user(pointer)
  • Category: name

操作说明

  • 按照官方文档序列化和反序列化的方法
  • 自己编写了一个 fromJson函数来进行生成Model对象,发现在parseObject的时候Pointer对象的输出结果,见下方,是没有Category的name属性的

/// 序列化
  LCQuery query = LCQuery("Product");
  query.include("category");
  LCObject? product = await query.first();
  ProductItem productItem = ProductItem.fromJson(product.toString());


/// 在Model里的反序列化
/// ProductItem
factory ProductItem.fromJson(dynamic json) {
// 这里的Json 返回: 
// {"className":"Product","objectId":"6124596312129479047f4cf3","createdAt":"2021-08-24 10:28:51.769","updatedAt":"2021-08-24 10:28:51.769","category":{"__type":"Pointer","className":"Category","objectId":"612458c012129479047f4c2e"},"amount":"20","name":"小白方","user":{"xxxxxxx"}}


    LCObject lcObject = LCObject.parseObject(json);

    return ProductItem(
      objId: lcObject.objectId,
      // 这里的categoryItem就没有name属性了
      categoryItem: CategoryItem.fromJson(lcObject['category'].toString()),
      name: lcObject['name'],
      amount: lcObject['amount']
    );
/// CategoryItem
  factory CategoryItem.fromJson(dynamic json) {
    LCObject lcObject = LCObject.parseObject(json);
    return CategoryItem(lcObject.objectId, lcObject['name']);
  }

当前&期望行为

  • 当前:在CategoryItem中反序列化之后,就找不到['name']属性,因为从上层传递过来的Json是个Pointer类型的
  • 期望:可以正常反序列化出来Category的name属性,这样使用productItem.categoryitem.name即能找到相关联的数据

也许是 SDK 的序列化和反序列化方法不太完善。

可以给个详细的例子吗?包括:

  • 当前使用的 SDK 版本
  • 带 Pointer 字段的 object 的结构(如果有 AppId、Class、objectId 就更好了)
  • 序列化和反序列化的处理代码,当前 SDK 的行为,期望的行为

目前确实会忽略掉嵌套 LCObject 对象中的自定义字段,下个版本将修复这个问题。

1 人赞了这个帖子.

你好,我更新了一下帖子,有空可以看看哈,谢谢 yum

你好,在 0.7.34 中修复了这个问题。
感谢反馈!