Есть ли разумный способ смешивания моделей json_serializable и built_value в проекте?

Проблема заключается в следующем, у меня есть проект флаттера с некоторыми классами, использующими встроенное_значение, и некоторыми классами, использующими json_serializable. Оба прекрасно работают отдельно, но используют очень разные способы сериализации / десериализации JSON.

built_value делает свое дело с сериализаторами, а json_serializer использует соглашение dart:convert fromJson / toJson методы

И я не могу найти простой способ объединить их.

Я ищу что-то вроде этого:

Допустим, у меня есть класс @JsonSerializable() Person

@JsonSerializable()
class Person {
  final String name;
  final int age;

  Person(this.name, this.age);

  factory Person.fromJson(Map<String, dynamic> json) => _$PersonFromJson(json);

  Map<String, dynamic> toJson() => _$PersonToJson(this);

}

и класс built_value SomeAppState

abstract class SomeAppState implements Built<SomeAppState, SomeAppStateBuilder> {

  @nullable
  Person get currentPerson;

  SomeAppState._();
  factory SomeAppState([void Function(SomeAppStateBuilder) updates]) = _$SomeAppState;

  static Serializer<SomeAppState> get serializer => _$someAppStateSerializer;

}

Кажется, не существует разумного способа сериализации / десериализации объекта SomeAppState потому что build_value не заботится о fromJson/toJson, и, кажется, нет никакого другого способа сделать это наоборот, потому что сериализаторы built_value не производят Map<String, dynamic>

Я вынужден выбрать или / или просто принять, что вы не можете взаимодействовать между ними, или я что-то умное пропускаю?

0 ответов

built_value создаст Map<String, dynamic> если вы используете StandardJsonPlugin.

Возможно, вы сможете использовать это для подключения к dart:convertс toEncodable:

https://api.dartlang.org/stable/2.7.0/dart-convert/jsonEncode.html

Другие вопросы по тегам