Modern web applications communicate via Json, this small plugin aims to expose two interfaces for transforming an Object into Json and for an Object factory from Json


We leave you free to decide how best to create your instances, but we think it's a good strategy to use packs of 3 to avoid the usual code.

In this case, we recommend the json_serializable package


A simple usage example:

import 'package:jsonable_object/jsonable_object.dart';

class User implements IConvertToJson {
  final int id;

  const User(;

  FutureOr<Map<String, dynamic>> toJson() {
    return {'id': id };

class FactoryUser implements IFactoryObjectFromJson<User> {
  FutureOr<User> fromJson(FutureOr<Map<String, dynamic>> json) async {
    final map = await json;
    return User(map['id']);


void main() async {
  final json = <String, int>{'id': 1}; // accept synchronous values
  final jsonFuture = Future.value(<String, int>{'id': 2}); // also accept futures

  final user = await FactoryUser().fromJson(json);
  final user2 = await FactoryUser().fromJson(jsonFuture);

  final convertedJson = await user.toJson();
  final convertedJson2 = await user2.toJson();

  print(json); // show {id: 1}
  print(convertedJson); // show {id: 1}

  print(jsonFuture); // Instance of 'Future<Map<String, int>>'
  print(convertedJson2); // show {id: 2}


Support for doing something awesome. [...]