Десериализовать универсальный тип с помощью встроенного значения - PullRequest
0 голосов
/ 23 апреля 2019

У меня есть этот объект:

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, [{...' to 'ApiData' не выполнена из-за: десериализации '[{... ...'to' BuiltList 'не выполнен из-за: Неверный аргумент (ы): Неизвестный тип при десериализации.Требуется либо поле selectedType, либо поле дискриминатора.

Как мне указать "поле поля дискриминатора"?

Редактировать 2 - я нашел способ взломать егопока это меня не удовлетворяет, но я могу продолжать работать, пока не найду правильное решение: https://github.com/google/built_value.dart/issues/368#issuecomment-486567646

...