Десериализовать универсальный тип с помощью встроенного значения
У меня есть этот объект:
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'] Сбой из-за: Неверный аргумент (ы): Неизвестный тип при десериализации. Нужно либо указать тип, либо поле дискриминатора.
Как я могу указать "поле дискриминатора"?
Правка 2 - я нашел хак, чтобы обойти его сейчас, он меня не удовлетворяет, но я могу продолжать работать, пока не найду правильное решение: https://github.com/google/built_value.dart/issues/368