使用内置值反序列化通用类型

时间:2019-04-23 16:58:04

标签: dart flutter built-value

我有这个对象:

abstract class ApiData<T> implements Built<ApiData<T>, ApiDataBuilder<T>> {
    int get offset;

    int get limit;

    int get total;

    int get count;

    BuiltList<T> get results;

    ApiData._();

    factory ApiData([void Function(ApiDataBuilder<T>) updates]) = _$ApiData<T>;

    static Serializer<ApiData> get serializer => _$apiDataSerializer;
}

这是我用来将响应的动态结果映射到ApiData对象的代码:

Future<ApiData<T>> mapDynamic<T>(dynamic value) async {
    return standardSerializers.deserializeWith<ApiData<T>>(
      ApiData.serializer,
      value,
    );
}

但我最终遇到此错误:type '_$ApiDataSerializer' is not a subtype of type 'Serializer<ApiData<MyBuitValueAbstractObject>>'

我尝试添加:

static Serializer<ApiData<MyBuitValueAbstractObject>> get apiMyObjectSerializer => _$apiDataMyObjectSerializer;

但是那没有用。如何正确反序列化我的results

编辑1 -如果我使用standardSerializers.deserializeWith<ApiData>(这次不使用<T>),则会收到此消息错误:

  

未处理的异常:将'[offset,0,limit,20,total,2233,count,20,results,[{...)到'ApiData'的反序列化失败,原因是:将'[{...'由于以下原因,“ BuiltList”失败:参数无效:反序列化时类型未知。需要requiredType或discriminator字段。

如何指定“区分字段”?

编辑2 -我暂时发现了一种解决方法,它不能满足我的要求,但我可以继续努力,直到找到合适的解决方案为止:https://github.com/google/built_value.dart/issues/368#issuecomment-486567646

0 个答案:

没有答案