json_serializableに関する質問です。以下のようなJOSNをパースしてオブジェクトに入れたいです。
json
1{ 2 "myweb": { 3 "title_text": { 4 "text": "私のサイト" 5 }, 6 "strong_text": { 7 "text": "ちょっと大事な文" 8 } 9 } 10}
モデルとしては以下のようになります。
まず全てのモデルの実装元となる抽象クラスElmentNodeを定義しています。(@JsonSerializable系のアノテーションをこの抽象クラスにもつけるべきなのかはよく分かっていません)
dart
1import 'package:json_annotation/json_annotation.dart'; 2part 'element_node.g.dart'; 3 4(explicitToJson: true) 5abstract class ElmentNode { 6 ElmentNode(); 7 8 void parse(); 9 10 factory ElmentNode.fromJson(Map<String, dynamic> json) => 11 _$ElmentNodeFromJson(json); 12 Map<String, dynamic> toJson() => _$ElmentNodeToJson(this); 13}
抽象クラスElementNodeを実装したMyWebクラスを作成します。フィールドにElementNodeのリストを持っています。ここが私がハマっているポイントです。抽象クラスの型でコードジェネレーターがうまく関連付けを行ってくれません。
dart
1import 'package:json_annotation/json_annotation.dart'; 2part 'my_web.g.dart'; 3 4(explicitToJson: true) 5class MyWeb implements ElmentNode { 6 final List<ElmentNode> elementNodeList; 7 MyWeb(this.elementNodeList); 8 9 factory MyWeb.fromJson(Map<String, dynamic> json) => _$MyWebFromJson(json); 10 Map<String, dynamic> toJson() => _$MyWebToJson(this); 11 12 13 void parse() { 14 // TODO: implement parse 15 } 16}
もうひとつ抽象クラスElementNodeを実装したStrongTextを定義します。これは特に変わったことはしていません。
dart
1import 'package:json_annotation/json_annotation.dart'; 2part 'strong_text.g.dart'; 3 4(explicitToJson: true) 5class StrongText implements ElmentNode { 6 final String text; 7 StrongText(this.text); 8 9 factory StrongText.fromJson(Map<String, dynamic> json) => _$StrongTextFromJson(json); 10 Map<String, dynamic> toJson() => _$StrongTextToJson(this); 11 12 13 void parse() { 14 // TODO: implement parse 15 } 16}
足りない情報あれば補足いたします。よろしくおねがいします。
あなたの回答
tips
プレビュー