jaguar_serializer 2.2.12

  • Readme
  • Changelog
  • Example
  • Installing
  • 92

Pub Build Status Build Status Gitter

jaguar_serializer #

Format agnostic Serializer library that can be used in vm, browser and flutter for JSON, mongodb, postgresql, etc

Getting Started #

Install #



Simple serializer #

Import jaguar_serializer

import 'package:jaguar_serializer/jaguar_serializer.dart';

Create your model.

/// User model
class User {
  String name;
  int age;

Declare a Serializer for your model.

class UserJsonSerializer extends Serializer<User> with _$UserJsonSerializer {

Include the generated serializer functionality.

part 'user.jser.dart';

Generate Serializer #

Build #

Now you can build you serializer running the command

pub run build_runner build

# flutter
flutter packages pub run build_runner build

This command will generate _$UserJsonSerializer in file 'user.jser.dart'.

Use Serializer #

A Serializer will serialize and deserialize between your model and Map<String, dynamic>, that can be used to apply conversion to JSON, YAML, XML, etc.

import 'package:jaguar_serializer/jaguar_serializer.dart';
import 'model/user.dart';

void main() {
  final userSerializer = new UserJsonSerializer();
  User user = userSerializer.fromMap({
        'name': 'John',
        'age': 25

Serializer repository #

You can also use a JSON repository or implement one.

import 'package:jaguar_serializer/jaguar_serializer.dart';
import 'model/user.dart';

void main() {
  final jsonRepository = new JsonRepo()..add(new UserSerializer());
  User user = jsonRepository.from<User>('{"name":"John","age": 25}');

Changelog #

2.2.4 #

  • Replaced DateTimeMillisecondsProcessor with MillisecondsProcessor
  • Fixed MillisecondsProcessor utc bug

2.2.0 #

  • Dart 2 stable
  • Remove DateProcessor, use DateTimeProcessor instead
  • Remove DateTimeProcessor.utc() constructor
  • Add DateTimeUtcProcessor()
  • Remove date_format dependency

2.1.14 #

  • Added pass annotation

2.1.9 #

  • Exposed passProcessor

2.1.6 #

  • Added PassProcessor

2.1.5 #

  • Fixed bug when source is Map<dynamic, dynamic>

2.0.2 #

  • Set are not serializable

1.0.0-dev8 #

  • Add SafeNumberProcessor

1.0.0-dev7 #

  • fix flutter --release build

1.0.0-dev6 #

  • null safe processors

1.0.0-dev5 #

  • remove yaml support
    • easy to reimplement using yamlicious (example/basic/basic_main.dart)
  • add builtins processor (Date, numToString, stringToNum)

1.0.0-dev4 #

  • introduce field format to automatically convert field Example:

    class Model {  
      String myField;
    @GenSerializer(fieldFormat: FieldFormat.snakeCase)
    class ModelSerializer extends Serializer ... {}
    final map = { 'my_field': 'foo' };
    final model = serializer.fromMap(map);
    print(model.myField); // print 'foo'
  • we now support final field deserialization

  • createModel() in Serializer class is now deprecated, it will be remove in the final release of 1.0.0

1.0.0-dev2 #

  • simplify and optimize generated code
  • fix processor inside List/Map

*** Breaking Changes ***

  • All Serializers are now nullable by default
  • Drop Map key processor
  • Only Map<String, dynamic> can be encode
  • toMap(null) return null
  • fromMap(null) return null
  • fromMap({}) return object

1.0.0-dev1 #

  • update to dart 2
  • support build.yaml and build_runner

0.5.1 #

  • Removed deprecated processors field in GenSerializer use processor field in Property instead

0.5.0 #

  • support disable null check
  • deprecate GenSerializer.processor fields, FieldProcessor go into GenSerializer.fields inside Property
  • support for default value, String, int, double, bool, if a field is non nullable, jaguar will use the default value declared in you object constructor

Breaking Change EnDecode, DecodeOnly, EncodeOnly does not use optional parameter in constructor anymore,

example: EnDecode({this.alias, bool isNullable, FieldProcessor<T, dynamic> processor, T defaultsTo})

0.4.2 #

  • Better support of ddc

0.4.1 #

  • Added docs
  • Fixed README

0.4.0 #

Breaking Changes

  • Generator is now in a separate package
  • Angular style annotations, only one annotation
  fields: const {
    'field': const EncodeOnly('f')
  ignore: const [
  processors: const {
   'dates': const DateTimeProcessor(),
  serializers: const [

0.3.16 #

  • to, from, serialize, deserialize methods now handle null values correctly

0.3.15 #

  • serialize and deserialize methods now handle null values correctly

0.3.14 #

  • SerializerRepo handles when type is dynamic

0.3.12 #

  • Added from and to methods to SerializerRepo

0.3.11 #

  • SerializerRepo now serializes and de-serializes built-in types at the root like Map, List<List>, etc
  • added addAll method to SerializerRepo to add multiple serializers
  • Validation for RawData custom field processor

0.3.7 #

  • Add builtin RawData Processor
  • Optimize CustomFieldProcessor

0.3.6 #

  • Update build package to >=0.9.3 <0.10.0

0.3.5 #

  • serializers.yaml is now optional, Jaguar Serializer will take all dart files under lib, bin, example and test folders. Be careful on big project, watch can be slow or take a lot of resources.

0.3.4 #

  • Fixed ProvideSerializer for Map fields

0.3.3 #

  • Better failure messages when property is an Object or dynamic

0.3.2 #

  • Added "exclude by default" feature

0.3.1 #

  • Update build (>=0.7.0 <0.8.0)
  • serializer init command, generate serializer.yaml
  • fix overrided field in double inside the generated code

0.3.0 #


  • Repository system (Json, Yaml)
  • embeded type => see typeKey
  • Optional parameters for GenSerializer :
    • bool typeKey (default:true) if you want to include the type
    • String modelName value that will be include as a type.

0.1.2 #

First release.


  1. Serializer for dart builtin types
  2. Custom serializers for fields
  3. Nested Map and List serializers

0.1.3 #

  • Fixed renaming encode field bug

0.1.6 #

  • Null nested objects are not serialized properly


import 'package:jaguar_serializer/jaguar_serializer.dart';

part 'example.jser.dart';

class Player {
  String name;
  String email;
  int score;
  List<Address> address;

  Player({,, this.score, this.address});

  String toString() => 'Player($name, $email, $score, $address)';

class Address {
  String street;
  String city;


  String toString() => 'Address($street, $city)';

class PlayerSerializer extends Serializer<Player> with _$PlayerSerializer {}

class AddressSerializer extends Serializer<Address> with _$AddressSerializer {}

void main() {
  // user basic serializer
  PlayerSerializer plSer = new PlayerSerializer();
  Player player = new Player(
      name: 'John',
      email: '',
      score: 1000,
      address: [(new Address(street: 'Skögsangavägen', city: 'Stockholm'))]);

  final Map map = plSer.toMap(player);

  Player decoded = plSer.fromMap(map);

Use this package as a library

1. Depend on it

Add this to your package's pubspec.yaml file:

  jaguar_serializer: ^2.2.12

2. Install it

You can install packages from the command line:

with pub:

$ pub get

with Flutter:

$ flutter pub get

Alternatively, your editor might support pub get or flutter pub get. Check the docs for your editor to learn more.

3. Import it

Now in your Dart code, you can use:

import 'package:jaguar_serializer/jaguar_serializer.dart';
Describes how popular the package is relative to other packages. [more]
Code health derived from static analysis. [more]
Reflects how tidy and up-to-date the package is. [more]
Weighted score of the above. [more]
Learn more about scoring.

We analyzed this package on Oct 11, 2019, and provided a score, details, and suggestions below. Analysis was completed with status completed using:

  • Dart: 2.5.1
  • pana: 0.12.21


Detected platforms: Flutter, web, other

No platform restriction found in primary library package:jaguar_serializer/jaguar_serializer.dart.

Health suggestions

Fix lib/src/annotations/annotations.dart. (-3.45 points)

Analysis of lib/src/annotations/annotations.dart reported 7 hints, including:

line 46 col 19: Use = to separate a named parameter from its default value.

line 47 col 18: Use = to separate a named parameter from its default value.

line 48 col 23: Use = to separate a named parameter from its default value.

line 49 col 28: Use = to separate a named parameter from its default value.

line 50 col 26: Use = to separate a named parameter from its default value.

Fix lib/src/repo/impl.dart. (-1.99 points)

Analysis of lib/src/repo/impl.dart reported 4 hints:

line 30 col 7: DO use curly braces for all flow control structures.

line 45 col 9: DO use curly braces for all flow control structures.

line 62 col 7: DO use curly braces for all flow control structures.

line 74 col 7: DO use curly braces for all flow control structures.

Fix lib/src/serializer/field_processor.dart. (-1.99 points)

Analysis of lib/src/serializer/field_processor.dart reported 4 hints:

line 159 col 48: Use = to separate a named parameter from its default value.

line 171 col 48: Use = to separate a named parameter from its default value.

line 203 col 48: Use = to separate a named parameter from its default value.

line 217 col 51: Use = to separate a named parameter from its default value.

Fix lib/jaguar_serializer.dart. (-0.50 points)

Analysis of lib/jaguar_serializer.dart reported 1 hint:

line 1 col 1: Prefer using /// for doc comments.


Package Constraint Resolved Available
Direct dependencies
Dart SDK >=2.0.0 <3.0.0
Dev dependencies
build_runner ^1.0.0