Viewing version 0.5.6. Open the latest package page.

json_serializable

0.5.6

Generates utilities to aid in serializing to/from JSON.

Download archive

Readme

Build Status

Provides Dart Build System builders for handling JSON.

The builders generate code when they find members annotated with classes defined in package:json_annotation.

  • To generate to/from JSON code for a class, annotate it with JsonSerializable. You can provide arguments to JsonSerializable to configure the generated code. You can also customize individual fields by annotating them with JsonKey and providing custom arguments.

  • To generate a Dart field with the contents of a file containting JSON, use the JsonLiteral annotation.

To configure your project for the latest released version of, json_serializable see the example.

Example

Given a library example.dart with an Person class annotated with @JsonSerializable():

import 'package:json_annotation/json_annotation.dart';

part 'example.g.dart';

@JsonSerializable(nullable: false)
class Person extends Object with _$PersonSerializerMixin {
  final String firstName;
  final String lastName;
  final DateTime dateOfBirth;
  Person({this.firstName, this.lastName, this.dateOfBirth});
  factory Person.fromJson(Map<String, dynamic> json) => _$PersonFromJson(json);
}

Building creates the corresponding part example.g.dart:

part of 'example.dart';

Person _$PersonFromJson(Map<String, dynamic> json) {
  return new Person(
      firstName: json['firstName'] as String,
      lastName: json['lastName'] as String,
      dateOfBirth: DateTime.parse(json['dateOfBirth'] as String));
}

abstract class _$PersonSerializerMixin {
  String get firstName;
  String get lastName;
  DateTime get dateOfBirth;
  Map<String, dynamic> toJson() => <String, dynamic>{
        'firstName': firstName,
        'lastName': lastName,
        'dateOfBirth': dateOfBirth.toIso8601String()
      };
}

Build configuration

Besides setting arguments on the associated annotation classes, you can also configure code generation by setting values in build.yaml.

targets:
  $default:
    builders:
      json_serializable:
        options:
          # Specifies a string to add to the top of every generated file.
          #
          # If not specified, the default is the value of `defaultFileHeader`
          # defined in `package:source_gen/source_gen.dart`.
          #
          # Note: use `|` to define a multi-line block.
          header: |
           // Copyright (c) 2018, the Dart project authors.

           // GENERATED CODE - DO NOT MODIFY BY HAND

          # Options configure how source code is generated for every
          # `@JsonSerializable`-annotated class in the package.
          #
          # The default value for each of them: `false`.
          #
          # For usage information, reference the corresponding field in
          # `JsonSerializableGenerator`.
          use_wrappers: true
          any_map: true
          checked: true
Changelog

0.5.6

  • Added support for JsonSerializable.disallowUnrecognizedKeys.
    • Throws an UnrecognizedKeysException if it finds unrecognized keys in the JSON map used to create the annotated object.
    • Will be captured captured and wrapped in a CheckedFromJsonException if checked is enabled in json_serializable.
  • All fromJson constructors now use block syntax instead of fat arrows.

0.5.5

  • Added support for JsonKey.defaultValue.

  • enum deserialization now uses helpers provided by json_annotation.

  • Small change to how nullable Map values are deserialized.

  • Small whitespace changes to JsonLiteral generation to align with dartfmt.

  • Improve detection of toJson and fromJson in nested types.

0.5.4+1

  • Fixed a bug introduced in 0.5.4 in some cases where enum values are nested in collections.

0.5.4

  • Add checked configuration option. If true, generated fromJson functions include extra checks to validate proper deserialization of types.

  • Added any_map to configuration. Allows fromJson code to support dynamic Map instances that are not explicitly Map<String, dynaimc>.

  • Added support for classes with type arguments.

  • Use Map.map for more map conversions. Simplifies generated code and fixes a subtle issue when the Map key type is dynamic or Object.

0.5.3

  • Require the latest version of package:analyzer - v0.32.0.

  • If JsonKey.fromJson function parameter is Iterable or Map with type arguments of dynamic or Object, omit the arguments when generating a cast. _myHelper(json['key'] as Map) instead of _myHelper(json['key'] as Map<dynamic, dynamic>).

  • JsonKey.fromJson/.toJson now support functions with optional arguments.

0.5.2

  • If JsonKey.fromJson/toJson are set, apply them before any custom or default TypeHelper instances. This allows custom DateTime parsing, by preempting the existing DateTime TypeHelper.

0.5.1

  • Support new fromJson and toJson fields on JsonKey.

  • Use log exposed by package:build. This requires end-users to have at least package:build_runner ^0.8.2.

  • Updated minimum package:source_gen dependency to 0.8.1 which includes improved error messages.

0.5.0

  • BREAKING Removed deprecated support for require_library_directive / requireLibraryDirective in build_runner configuration.

  • BREAKING Removed the deprecated generators.dart library.

  • BREAKING Removed jsonPartBuilder function from public API.

  • Support the latest package:source_gen.

  • Private and ignored fields are now excluded when generating serialization and deserialization code by using @JsonKey(ignore: true).

  • Throw an exception if a private field or an ignored field is referenced by a required constructor argument.

  • More comprehensive escaping of string literals.

package:json_serializable/type_helper.dart

  • Breaking The nullable parameter on TypeHelper.serialize and .deserialize has been removed. It is now exposed in SerializeContext and DeserializeContext abstract classes as a read-only property.

  • Potentially Breaking The metadata property on SerializeContext and DeserializeContext is now readonly. This would potentially break code that extends these classes – which is not expected.

0.4.0

  • Potentially Breaking Inherited fields are now processed and used when generating serialization and deserialization code. There is a possibility that the generated code may change in undesired ways for classes annotated for v0.3.

  • Avoid unnecessary braces in string escapes.

  • Use single quotes when generating code.

0.3.2

  • The require_library_directive option now defaults to false. The option will be removed entirely in 0.4.0.

0.3.1+2

  • Support the latest version of the analyzer package.

0.3.1+1

  • Expanded package:build support to allow version 0.12.0.

0.3.1

  • Add a build.yaml so the builder can be consumed by users of build_runner version 0.7.0.

  • Now requires a Dart 2.0.0-dev release.

0.3.0

  • NEW top-level library json_serializable.dart.

    • Replaces now deprecated generators.dart to access JsonSerializableGenerator and JsonLiteralGenerator.

    • Adds the jsonPartBuilder function to make it easy to create a PartBuilder, without creating an explicit dependency on source_gen.

  • BREAKING UnsupportedTypeError added a new required constructor argument: reason.

  • BREAKING The deprecated annotations.dart library has been removed. Use package:json_annotation instead.

  • BREAKING The arguments to TypeHelper serialize and deserialize have changed.

    • SerializeContext and DeserializeContext (new classes) are now passed instead of the TypeHelperGenerator typedef (which has been deleted).
  • JsonSerializableGenerator now supports an optional useWrappers argument when generates and uses wrapper classes to (hopefully) improve the speed and memory usage of serialization – at the cost of more code.

    NOTE: useWrappers is not guaranteed to improve the performance of serialization. Benchmarking is recommended.

  • Make null field handling smarter. If a field is classified as not nullable, then use this knowledge when generating serialization code – even if includeIfNull is false.

0.2.5

  • Throw an exception if a duplicate JSON key is detected.

  • Support the nullable field on the JsonSerializable class annotation.

0.2.4+1

  • Throw a more helpful error when a constructor is missing.

0.2.4

  • Moved the annotations in annotations.dart to package:json_annotations.

    • Allows package authors to release code that has the corresponding annotations without requiring package users to inherit all of the transitive dependencies.
  • Deprecated annotations.dart.

0.2.3

  • Write out toJson methods more efficiently when the first fields written are not intercepted by the null-checking method.

0.2.2+1

  • Simplify the serialization of Map instances when no conversion is required for values.

  • Handle int literals in JSON being assigned to double fields.

0.2.2

  • Enable support for enum values.
  • Added asConst to JsonLiteral.
  • Improved the handling of Dart-specific characters in JSON strings.

0.2.1

  • Upgrade to package:source_gen v0.7.0

0.2.0+1

  • When serializing classes that implement their own fromJson constructor, honor their constructor parameter type.

0.2.0

  • BREAKING Types are now segmented into their own libraries.

    • package:json_serializable/generators.dart contains Generator implementations.

    • package:json_serializable/annotations.dart contains annotations. This library should be imported with your target classes.

    • package:json_serializable/type_helpers.dart contains TypeHelper classes and related helpers which allow custom generation for specific types.

  • BREAKING Generation fails for types that are not a JSON primitive or that do not explicitly supports JSON serialization.

  • BREAKING TypeHelper:

    • Removed can methods. Return null from (de)serialize if the provided type is not supported.

    • Added (de)serializeNested arguments to (de)serialize methods allowing generic types. This is how support for Iterable, List, and Map is implemented.

  • BREAKING JsonKey.jsonName was renamed to name and is now a named parameter.

  • Added support for optional, non-nullable fields.

  • Added support for excluding null values when generating JSON.

  • Eliminated all implicit casts in generated code. These would end up being runtime checks in most cases.

  • Provide a helpful error when generation fails due to undefined types.

0.1.0+1

  • Fix homepage in pubspec.yaml.

0.1.0

  • Split off from source_gen.

  • Add /* unsafe */ comments to generated output likely to be unsafe.

  • Support (de)serializing values in Map.

  • Fix ordering of fields when they are initialized via constructor.

  • Don't use static members when calculating fields to (de)serialize.

Installing

export PUB_HOSTED_URL=https://pub.mirror.p-hatan.ir
flutter pub add 'json_serializable:0.5.6'
pubspec.yaml
name: json_serializable
version: 0.5.6
author: Dart Team <misc@dartlang.org>
description: Generates utilities to aid in serializing to/from JSON.
homepage: https://github.com/dart-lang/json_serializable
environment:
  sdk: '>=2.0.0-dev.54 <2.0.0'
dependencies:
  analyzer: ^0.32.0
  build: '>=0.9.0 <0.13.0'
  build_config: '>=0.2.6 <0.4.0'

  # Use a tight version constraint to ensure that a constraint on
  # `json_annotation`. Properly constrains all features it provides.
  json_annotation: '>=0.2.7 <0.2.8'
  meta: ^1.1.0
  path: ^1.3.2
  source_gen: '>=0.8.1 <0.9.0'
dev_dependencies:
  build_runner: ^0.8.0
  build_web_compilers: ^0.4.0+1
  build_test: ">=0.9.0 <0.11.0"
  collection: ^1.14.0
  dart_style: ^1.0.0
  logging: ^0.11.3+1
  test: ^0.12.3
  yaml: ^2.1.13

Version history

VersionPublishedArchiveSHA-256
0.1.0Cached · Upstream SHA-256 matchedDownloadea38aff2…357ce4
0.1.0+1Cached · Upstream SHA-256 matchedDownload54608c1f…fae3e4
0.2.0Cached · Upstream SHA-256 matchedDownload228de10d…0dc07d
0.2.0+1Cached · Upstream SHA-256 matchedDownloadbc4de154…cd2c76
0.2.1Cached · Upstream SHA-256 matchedDownload925b3d51…19cab5
0.2.2Cached · Upstream SHA-256 matchedDownload4bde8d44…7c6625
0.2.2+1Cached · Upstream SHA-256 matchedDownload06b55410…03b5cf
0.2.3Cached · Upstream SHA-256 matchedDownload98f510ad…eac912
0.2.3+1Cached · Upstream SHA-256 matchedDownloade6363ffc…0f3f04
0.2.4Cached · Upstream SHA-256 matchedDownload332c5d27…4db89f
0.2.4+1Cached · Upstream SHA-256 matchedDownload9ee6223b…9cd202
0.2.5Cached · Upstream SHA-256 matchedDownload25d0c6df…5da947
0.3.0Cached · Upstream SHA-256 matchedDownload8970e927…c017f6
0.3.1Cached · Upstream SHA-256 matchedDownload4d856bb2…1086ee
0.3.1+1Cached · Upstream SHA-256 matchedDownloadceaa1075…d43605
0.3.1+2Cached · Upstream SHA-256 matchedDownload7576a95d…9b2e9d
0.3.2Cached · Upstream SHA-256 matchedDownload8fc35438…08ba16
0.4.0Cached · Upstream SHA-256 matchedDownload52fca6a7…bbb0d5
0.5.0Cached · Upstream SHA-256 matchedDownloadceb97da7…f705f8
0.5.1Cached · Upstream SHA-256 matchedDownload555278a0…31b474
0.5.2Cached · Upstream SHA-256 matchedDownload4a477c42…dea9df
0.5.3Cached · Upstream SHA-256 matchedDownload453fab42…39f3f8
0.5.4Cached · Upstream SHA-256 matchedDownload2b743d72…be94c7
0.5.4+1Cached · Upstream SHA-256 matchedDownload8e4f2cfa…4fc7de
0.5.5Cached · Upstream SHA-256 matchedDownload825ff2da…d2676c
0.5.6Cached · Upstream SHA-256 matchedDownload11092952…b28665
0.5.7Cached · Upstream SHA-256 matchedDownloadafd52873…21feff
0.5.8Cached · Upstream SHA-256 matchedDownload56d661f5…19ac8b
0.5.8+1Cached · Upstream SHA-256 matchedDownload6c80bfb5…d03209
1.0.0Cached · Upstream SHA-256 matchedDownloadca0c6ffc…e59fc5
1.0.1Cached · Upstream SHA-256 matchedDownloadc1479f04…3d14ee
1.1.0Cached · Upstream SHA-256 matchedDownload46d41e4f…df92f9
1.2.0Cached · Upstream SHA-256 matchedDownload4075e577…1b11b7
1.2.1Cached · Upstream SHA-256 matchedDownload8629d4cb…9de3dc
1.3.0Cached · Upstream SHA-256 matchedDownload0236f7f0…a15438
1.4.0Cached · Upstream SHA-256 matchedDownload394035ff…d1641c
1.5.0Cached · Upstream SHA-256 matchedDownload086663d3…fae00b
1.5.1Cached · Upstream SHA-256 matchedDownload977f3916…91f75b
2.0.0Cached · Upstream SHA-256 matchedDownload0b0a7239…f467f4
2.0.1Cached · Upstream SHA-256 matchedDownloade314d1da…a97c4f
2.0.2Cached · Upstream SHA-256 matchedDownload31fc6262…16290c
2.0.3Cached · Upstream SHA-256 matchedDownload12a5cfd6…199157
2.1.0Cached · Upstream SHA-256 matchedDownload330b4534…674a33
2.1.1Cached · Upstream SHA-256 matchedDownload9fb477f1…8ff6b9
2.1.2Cached · Upstream SHA-256 matchedDownload744218d0…9167e3
2.2.0Cached · Upstream SHA-256 matchedDownload35995d69…dcfe7b
2.2.1Cached · Upstream SHA-256 matchedDownload2dbfe302…23d088
2.2.2Cached · Upstream SHA-256 matchedDownload33166f5f…53ca39
2.3.0Cached · Upstream SHA-256 matchedDownloadc132f057…8d9ab2
3.0.0Cached · Upstream SHA-256 matchedDownload48d5294c…082144
3.1.0Cached · Upstream SHA-256 matchedDownload200067f1…872db6
3.2.0Cached · Upstream SHA-256 matchedDownload3c157eae…aba16d
3.2.1Cached · Upstream SHA-256 matchedDownload4c198769…eb5690
3.2.2Cached · Upstream SHA-256 matchedDownload358bed36…505f0c
3.2.3Cached · Upstream SHA-256 matchedDownload4ea7527e…908178
3.2.4Cached · Upstream SHA-256 matchedDownload8717e5f5…f655fd
3.2.5Cached · Upstream SHA-256 matchedDownload62aa4c18…96ec5c
3.3.0Cached · Upstream SHA-256 matchedDownloadf30cdc18…5eee4d
3.4.0Cached · Upstream SHA-256 matchedDownloadb198894a…a89ac9
3.4.1Cached · Upstream SHA-256 matchedDownload47222df0…cecf87
3.5.0Cached · Upstream SHA-256 matchedDownload8000c8f8…cc15f7
3.5.1Cached · Upstream SHA-256 matchedDownload698f328e…e4bab5
3.5.2Cached · Upstream SHA-256 matchedDownload0f9e7274…71bf71
4.0.0-nullsafety.0Cached · Upstream SHA-256 matchedDownload65086760…4d8130
4.0.0Cached · Upstream SHA-256 matchedDownloadbf5cd59a…50e4e3
4.0.1Cached · Upstream SHA-256 matchedDownloadf9f62b88…b2677e
4.0.2Cached · Upstream SHA-256 matchedDownloadc29fcdae…9ab2bc
4.0.3Cached · Upstream SHA-256 matchedDownloadc17fe901…049696
4.1.0Cached · Upstream SHA-256 matchedDownload04a71e61…0ec003
4.1.1Cached · Upstream SHA-256 matchedDownload194d4ffc…746aa0
4.1.2Cached · Upstream SHA-256 matchedDownloade58e35c2…2b5dba
4.1.3Cached · Upstream SHA-256 matchedDownloadbd4c3eec…990338
4.1.4Cached · Upstream SHA-256 matchedDownload86d3edf6…3bb323
5.0.0Cached · Upstream SHA-256 matchedDownloade55b5148…5ed5cd
5.0.1Cached · Upstream SHA-256 matchedDownloade760d5cf…bf636c
5.0.2Cached · Upstream SHA-256 matchedDownload4af86580…04cc1c
6.0.0Cached · Upstream SHA-256 matchedDownload5a0f38bb…21beb8
6.0.1Cached · Upstream SHA-256 matchedDownload45234e44…a4b23c
6.1.0Cached · Upstream SHA-256 matchedDownload64965139…038587
6.1.1Cached · Upstream SHA-256 matchedDownload9baed298…ead1cb
6.1.2Cached · Upstream SHA-256 matchedDownloadc7119ff7…7c1a31
6.1.3Cached · Upstream SHA-256 matchedDownload85f3e219…d57cfc
6.1.4Cached · Upstream SHA-256 matchedDownloaddc6f9551…1ee8ca
6.1.5Cached · Upstream SHA-256 matchedDownloada53cf24d…a08610
6.1.6Cached · Upstream SHA-256 matchedDownload3feab8c3…b10f39
6.2.0Cached · Upstream SHA-256 matchedDownload4fc3fb22…aee75d
6.3.0Cached · Upstream SHA-256 matchedDownload40e713f3…a90f13
6.3.1Cached · Upstream SHA-256 matchedDownload0cec7060…ee8238
6.3.2Cached · Upstream SHA-256 matchedDownloadfd1bcfbf…116932
6.4.0Cached · Upstream SHA-256 matchedDownload276b80dd…a54202
6.4.1Cached · Upstream SHA-256 matchedDownload581006a3…7cfe4b
6.5.0Cached · Upstream SHA-256 matchedDownload45205106…757fe9
6.5.1Cached · Upstream SHA-256 matchedDownload2296021b…f04bb4
6.5.2Cached · Upstream SHA-256 matchedDownloadf8aec50d…c97f74
6.5.3Cached · Upstream SHA-256 matchedDownload87ce738d…c2bfb0
6.5.4Cached · Upstream SHA-256 matchedDownloadf3c2c18a…53ef5d
6.6.0Cached · Upstream SHA-256 matchedDownload040088d9…700a75
6.6.1Cached · Upstream SHA-256 matchedDownloaddadc08bd…8d187a
6.6.2Cached · Upstream SHA-256 matchedDownload43793352…c04dc7
6.7.0Cached · Upstream SHA-256 matchedDownload61a60716…2325c4
6.7.1Cached · Upstream SHA-256 matchedDownloadaa1f5a89…b0b969
6.8.0Cached · Upstream SHA-256 matchedDownloadea1432d1…a1fd4b
6.9.0Cached · Upstream SHA-256 matchedDownloadc2fcb392…050d7c
6.9.1Cached · Upstream SHA-256 matchedDownloade7855a40…7154b4
6.9.2Cached · Upstream SHA-256 matchedDownload8f52361c…05d571
6.9.3Cached · Upstream SHA-256 matchedDownloadb0a98230…dd59c9
6.9.4Cached · Upstream SHA-256 matchedDownload81f04dee…c9e58a
6.9.5Cached · Upstream SHA-256 matchedDownloadc50ef5fc…feea8c
6.10.0-devCached · Upstream SHA-256 matchedDownloadab72b330…666393
6.10.0Cached · Upstream SHA-256 matchedDownloadce2cf974…55be27
6.11.0Cached · Upstream SHA-256 matchedDownload3f2913b7…b80cbd
6.11.1Cached · Upstream SHA-256 matchedDownload33a04066…3aa6fe
6.11.2Cached · Upstream SHA-256 matchedDownloadc5b2ee75…fdffa3
6.11.3Cached · Upstream SHA-256 matchedDownload6b253f78…e0b5b1
6.11.4Cached · Upstream SHA-256 matchedDownload5b89c1e3…f8104e
6.12.0Cached · Upstream SHA-256 matchedDownload93fba3ad…25760d
6.13.0Cached · Upstream SHA-256 matchedDownload44729f5c…16a6c0
6.13.1Cached · Upstream SHA-256 matchedDownloadfbcf404b…a78925
6.13.2Cached · Upstream SHA-256 matchedDownload2c15e78e…7f20db
6.14.0Cached · Upstream SHA-256 matchedDownloadffcd10cd…97e501
6.14.1Cached · Upstream SHA-256 matchedDownloade45aefa0…63113d
6.15.0Cached · Upstream SHA-256 matchedDownloadeb8d06bc…b541f8
6.15.1Cached · Upstream SHA-256 matchedDownload3b177bc1…fd0f33
6.15.2Cached · Upstream SHA-256 matchedDownloadcc782276…1c66f1

Dependencies

analyzer "^0.32.0"

build "\u003e=0.9.0 \u003c0.13.0"

build_config "\u003e=0.2.6 \u003c0.4.0"

json_annotation "\u003e=0.2.7 \u003c0.2.8"

meta "^1.1.0"

path "^1.3.2"

source_gen "\u003e=0.8.1 \u003c0.9.0"