Можно ли совместить BuiltValue и обычную сериализацию? Потому что я хочу использовать методы from Json и Json из моей модели Language.
Допустим, у меня есть модель User
, которая использует встроенное значение для сериализации и класс Language
, который использует стандартную сериализацию .
abstract class User implements Built<User, UserBuilder> {
static Serializer<User> get serializer => _$userSerializer;
String get description;
// ...
Language get language; // Language should use fromJson / toJson methods!
Следующий фрагмент кода теста не выполнен, так как он ищет сериализатор языка. Вместо этого я хочу использовать методы from Json и Json от Language.
final user = User((u) => u
..description = 'some description'
..language = Language(
name: 'English',
code: 'en',
nativeName: 'English',
));
void main() {
test('...', () {
final json = serializers.serialize(user);
expect(serializers.deserialize(json), user);
});
}
А вот модель Language, которая использует обычную сериализацию с toJson / from Json.
@immutable
class Language {
final String name;
final String nativeName;
final String code;
const Language({
@required this.name,
@required this.nativeName,
@required this.code,
});
@override
static Language fromJson(dynamic json) => Language(
name: json['name'],
nativeName: json['nativeName'],
code: json['code'],
);
@override
dynamic toJson() => {
'name': name,
'nativeName': nativeName,
'code': code,
};
@override
bool operator ==(Object other) =>
identical(this, other) ||
other is Language &&
runtimeType == other.runtimeType &&
name == other.name &&
nativeName == other.nativeName &&
code == other.code;
@override
int get hashCode => name.hashCode ^ nativeName.hashCode ^ code.hashCode;
}