【Dart】カスタムクラスをJSON(文字列)へ変換

DartでカスタムクラスをJSON(文字列)へ変換する方法についてソースコード付きでまとめました。

【Dart】カスタムクラス > JSON(文字列)

dart:convertで、自作のカスタムクラスを変換する場合は、toJsonメソッドをクラスに実装します。
toJsonメソッドは、JSON文字列へ変換可能なオブジェクトを返すメソッドです。

【サンプルコード】Dart

サンプルプログラムのソースコードです。

import 'dart:convert';

void main() {
  MyClass1 my1 = new MyClass1("ONE", 1);
  MyClass2 my2 = new MyClass2("TWO", 2);

  // toJsonがあればエンコード可能
  print(json.encode(my1)); // {"text":"ONE","number":1}


  // toJsonがないクラスはエラー
  print(json.encode(my2));
/*
Unhandled exception:
Converting object to an encodable object failed: Instance of 'MyClass2'
#0      _JsonStringifier.writeObject (dart:convert/json.dart:647:7)
#1      _JsonStringStringifier.printOn (dart:convert/json.dart:834:17)
#2      _JsonStringStringifier.stringify (dart:convert/json.dart:819:5)
#3      JsonEncoder.convert (dart:convert/json.dart:255:30)
#4      JsonCodec.encode (dart:convert/json.dart:166:45)
#5      main (file:///C:/prog/flutter/a/test.dart:12:14)
#6      _startIsolate. (dart:isolate-patch/isolate_patch.dart:301:19)
#7      _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:172:12)
*/
}

class MyClass1 {
  String text;
  int    number;

  MyClass1(this.text, this.number);

  // encode時に呼ばれ、JSON文字列へと変換可能なオブジェクト(今回はmap型)を返す
  dynamic toJson() => {"text":text, "number":number};
}

class MyClass2 {
  String text;
  int    number;
  MyClass2(this.text, this.number);
}
関連記事
1 【Flutter入門】iOS、Android、Windowsアプリ開発
2 【Dart入門】基礎文法とサンプルコード集
Dart
技術雑記

コメント

タイトルとURLをコピーしました