BuiltValue в сочетании с обычной сериализацией - PullRequest
0 голосов
/ 07 февраля 2020

Можно ли совместить 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;
}
...