dart_serializable 1.0.0 copy "dart_serializable: ^1.0.0" to clipboard
dart_serializable: ^1.0.0 copied to clipboard

A json serialization lib for dart.

dart_serializable #

I never liked the way Dart developers used to serialize objects by creating a factory constructor, as this way doesn't provide a base class for serialization. Providing a base class is the OOP way of doing things, as it will be enough to send a Serializable object to the caching function or the HTTP send method as the request body, and the method will handle it.

In a language like C# this is not needed as any object can be serialized via reflection, which dart language abandoned in favor of tree-shaking.

Trying to use Generics to implement it failed as dart language doesn't support creating a new object of generic type new T(), solved by requiring a creator callback as a parameter

Example #

class Model1 extends Serializable{

  String? stringField;
  int? intField;
  double? doubleField;
  bool? boolField;

  @override
  void fromMap(Map<String, dynamic> map) {
    stringField = map['stringField'];
    intField = map['intField'];
    doubleField = map['doubleField'];
    boolField = map['boolField'];
  }

  @override
  Map<String, dynamic> toMap() {
    final Map<String, dynamic> map = <String, dynamic>{};
    map['stringField'] = stringField;
    map['intField'] = intField;
    map['doubleField'] = doubleField;
    map['boolField'] = boolField;
    return map;
  }

}

void main() {
  var model = Model1()
    ..stringField='abc'
    ..intField=4
    ..doubleField=3.6
    ..boolField=true;

  var json = Serializable.serializeObject(model);
  print(json);

  var deserializedModel = Serializable.deserializeObject(json, ()=> Model1());
  print(deserializedModel);
}

The output would be

{"stringField":"abc","intField":4,"doubleField":3.6,"boolField":true}
{"stringField":"abc","intField":4,"doubleField":3.6,"boolField":true}

For lists

var jsonList = '[{"stringField":"abc","intField":4,"doubleField":3.6,"boolField":true}, {"stringField":"def","intField":5,"doubleField":3.8,"boolField":false}]';

  var list = Serializable.deserializeList(jsonList, ()=> Model1());
  print(list);

Class Generator #

Any generator can be used, but you need to change the created methods to conform to the fromMap and toMap required by Serializable base, or use this utility which is a cmd app created in .Net

GitHub - muhammad369/JsonToDart

5
likes
130
points
187
downloads

Publisher

unverified uploader

Weekly Downloads

A json serialization lib for dart.

Repository (GitHub)
View/report issues

Documentation

API reference

License

MIT (license)

More

Packages that depend on dart_serializable