Какой лучший подход к модели с сериализацией JSON для замороженных Union/Sealed Classes, если вы не можете контролировать структуру предоставленного JSON?
Учитывая неизменяемый JSON, вы получаете от сервера вот такое:
{ "name": "someName",
"fields": [
{ "name": "field1",
"type": "text",
"subtype": "autofill",
"value": "someVal" },
{ "name": "field2",
"type": "text",
"subtype": "password",
"value": "somePass" },
{ "name": "field3",
"type": "number",
"subtype": "integer",
"value": 12 },
{ "name": "field4",
"type": "number",
"subtype": "double",
"value": 3.14 }
],
"etc": "etc"
}
Замороженная модель должна быть примерно такой:
@freezed
class ExampleSuperclass with _$ExampleSuperclass {
factory ExampleSuperclass({
String? name,
List<Field>? fields,
String? etc,
}) = _ExampleSuperclass;
factory ExampleSuperclass.fromJson(Map<String, dynamic> json) =>
_$ExampleSuperclassFromJson(json);
}
@Freezed(unionKey: 'type')
class Field with _$Field {
factory Field({
String? name,
String? type,
String? subtype,
}) = _Field;
factory Field.text({
String? name,
String? type,
String? subtype,
}) = _FieldText;
factory Field.number({
String? name,
String? type,
String? subtype,
}) = _FieldNumber;
factory Field.fromJson(Map<String, dynamic> json) => _$FieldFromJson(json);
}
Но если вы понимаете, что вам нужны как тип, так и подтип, чтобы создать больше подтипов Field.number и Field.text, как вы можете добиться пользовательского fromJson, чтобы это было сделано?