質問
表題の通りですが、JsonSeriarizableを使用してtoJson/fromJsonを作成していますが、object型を入れ込むと下記のエラーになります。
Flutter
1Unhandled Exception: type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'String' in type cast
公式が紹介しているやり方を真似したり、エラー文を検索したりしましたが、エラーが解消しませんでした。原因は何でしょうか?
下記実際のコードです。
Fluter
1//HTTP通信のPostで使用する 2@JsonSerializable(explicitToJson: true,checked: true,) 3class HogeData { 4 late String mode; 5 @JsonKey(fromJson: _stringToInt , toJson: _stringFromInt) 6 int uid; 7 GenkouFormat? genkouFormat; 8 9 HogeData({ 10 required this.mode, 11 required this.uid, 12 required this.genkouFormat, 13 }); 14 15 //Int型のtoJson/fromJson 16 static int _stringToInt(String id) => int.parse(id); 17 static String _stringFromInt(int id) => id.toString(); 18 19 factory HogeData.fromJson(Map<String, dynamic> json) => 20 _$HogeDataFromJson(json); 21 22 Map<String, dynamic> toJson() => _$HogeDataToJson(this); 23}
Flutter
1@JsonSerializable() 2class GenkouFormat { 3 @JsonKey(fromJson: _stringToInt , toJson: _stringFromInt) 4 final int kid; 5 @JsonKey(fromJson: _stringToInt , toJson: _stringFromInt) 6 final int gen_id; 7 @JsonKey(fromJson: _stringToInt , toJson: _stringFromInt) 8 final int gen_bid; 9 final String? genkou_type; 10 11 GenkouFormat({required this.kid,required this.gen_id,required this.gen_bid, this.genkou_type}); 12 13 factory GenkouFormat.fromSource(Map src) { 14 return GenkouFormat( 15 kid: src['kid'], 16 gen_id: src['gen_id'], 17 gen_bid: src['gen_bid'], 18 genkou_type: src['genkou_type'], 19 ); 20 } 21 22 factory GenkouFormat.fromJson(Map<String, dynamic> json) =>_$GenkouFormatFromJson(json); 23 Map<String, dynamic> toJson() => _$GenkouFormatToJson(this); 24 25 static int _stringToInt(String id) => id == null ? 0 : int.parse(id); 26 static String _stringFromInt(int id) => id.toString(); 27}
Flutter
1try { 2 //HTTP・POSTを使用してデータを投げる 3 response = await http.post( 4 requestUrl, 5 body: HogeData.toJson(), //※※ここでエラーになる※※ 6 headers: {"Content-Type": "application/x-www-form-urlencoded"}, 7 ); 8 9 //無事通信が出来ていれば中に入る 10 if (response!.statusCode == 200) { 11 print("response 200"); 12 print(response!.body); 13 14 } 15} on Exception catch (error) { 16 print("response network Error"); 17 print("error: $error"); 18} 19
やったこと
公式では下記で出来るっぽいので追加しましたがエラーになっています。
@JsonSerializable(explicitToJson: true)
教えて欲しいこと
なぜあのエラー文が出てくるのか、もしくは原因を解決できる参考URLなど頂ければ幸いです!
よろしくお願い致します。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。