Skip to content

Upgrading json_serializable 1 to 2

Breaking1.5.1 → 2.3.0Breaking4Platform2New7Changed11Fixed4Other1

BreakingUpgrade verdict

4 breaking changes and 2 platform requirement changes.

  • Generated code is now stricter about List, Set, and Map types. Code that previously compiled with invalid generated output may now fail, but custom implementations of these types can add a fromJson constructor for custom decoding.
  • If your build configuration contains an option that is not supported, the build now fails with an error instead of silently ignoring it.
  • Code that creates or uses JsonSerializableGenerator must read settings from a single config object instead of separate properties.
  • Code that used the old context classes must switch to TypeHelperContext.
Top 5 of 6 that need code or config changes

Dart SDK requirement changed in 2.2.2: >=2.0.0-dev.65 <3.0.0 → >=2.2.0 <3.0.0.

Moves analyzer >=0.32.2 <0.34.0 → >=0.33.3 <0.37.0, build_config >=0.2.6 <0.4.0 → >=0.2.6 <0.5.0, json_annotation >=1.2.0 <1.3.0 → >=2.3.0 <2.4.0. Your build may pick other versions.

Breaking4
Becomes more strict about supported List, Set, or Map types, which may raise errors where invalid code was generated before.
ListSetMapfromJson
Unsupported options defined in build.yaml now cause exceptions instead of being logged and ignored.
build.yaml
JsonSerializableGenerator now exposes a config property of type JsonSerializable instead of individual properties for checked, anyMap, etc.
JsonSerializableGeneratorconfigJsonSerializablecheckedanyMap
Replaces SerializeContext and DeserializeContext with the new TypeHelperContext class.
SerializeContextDeserializeContextTypeHelperContext
Platform2
Requires at least Dart 2.2.0.
Requires at least Dart 2.1.1.

Generated by DepDelta from published Dart source. Not mixed with prose notes.

  • removed: field JsonSerializableGenerator.anyMap: final bool
  • removed: field JsonSerializableGenerator.checked: final bool
  • removed: field JsonSerializableGenerator.explicitToJson: final bool
  • removed: field JsonSerializableGenerator.generateToJsonFunction: final bool
  • removed: field JsonSerializableGenerator.useWrappers: final bool
  • changed: ctor JsonSerializableGenerator({ List<TypeHelper> typeHelpers, bool useWrappers = …, bool anyMap = …, bool checked = …, bool explicitToJson = …, bool generateToJsonFunction = …, }) → ctor JsonSerializableGenerator({ JsonSerializable config, List<TypeHelper> typeHelpers, })
  • changed: ctor JsonSerializableGenerator.withDefaultHelpers( Iterable<TypeHelper> typeHelpers, { bool useWrappers = …, bool anyMap = …, bool checked = …, bool generateToJsonFunction = …, }) → ctor JsonSerializableGenerator.withDefaultHelpers( Iterable<TypeHelper> typeHelpers, {JsonSerializable config})
  • added: get JsonSerializableGenerator.config: JsonSerializable
  • removed: class DeserializeContext: abstract
  • removed: class SerializeContext: abstract
  • removed: get DeserializeContext.metadata: List<ElementAnnotation>
  • removed: get DeserializeContext.nullable: bool
  • removed: get SerializeContext.metadata: List<ElementAnnotation>
  • removed: get SerializeContext.nullable: bool
  • removed: get SerializeContext.useWrappers: bool
  • removed: method DeserializeContext.addMember(String memberContent): void
  • removed: method DeserializeContext.deserialize(DartType fieldType, String expression): Object
  • removed: method SerializeContext.addMember(String memberContent): void
  • removed: method SerializeContext.serialize(DartType fieldType, String expression): Object
  • changed: class ConvertHelper extends TypeHelper → class ConvertHelper extends TypeHelper<TypeHelperContextWithConvert>
  • changed: class IterableHelper extends TypeHelper → class IterableHelper extends TypeHelper<TypeHelperContextWithConfig>
  • changed: class JsonHelper extends TypeHelper → class JsonHelper extends TypeHelper<TypeHelperContextWithConfig>
  • changed: class MapHelper extends TypeHelper → class MapHelper extends TypeHelper<TypeHelperContextWithConfig>
  • changed: class TypeHelper: abstract → class TypeHelper<T extends TypeHelperContext>: abstract
  • changed: method ConvertHelper.deserialize( DartType targetType, String expression, DeserializeContext context): String → method ConvertHelper.deserialize(DartType targetType, String expression, TypeHelperContextWithConvert context): String
  • changed: method ConvertHelper.serialize( DartType targetType, String expression, SerializeContext context): String → method ConvertHelper.serialize(DartType targetType, String expression, TypeHelperContextWithConvert context): String
  • changed: method DateTimeHelper.deserialize( DartType targetType, String expression, DeserializeContext context): String → method DateTimeHelper.deserialize( DartType targetType, String expression, TypeHelperContext context): String
  • changed: method DateTimeHelper.serialize( DartType targetType, String expression, SerializeContext context): String → method DateTimeHelper.serialize( DartType targetType, String expression, TypeHelperContext context): String
  • changed: method EnumHelper.deserialize( DartType targetType, String expression, DeserializeContext context): String → method EnumHelper.deserialize( DartType targetType, String expression, TypeHelperContext context): String
  • changed: method EnumHelper.serialize( DartType targetType, String expression, SerializeContext context): String → method EnumHelper.serialize( DartType targetType, String expression, TypeHelperContext context): String
  • changed: method IterableHelper.deserialize( DartType targetType, String expression, DeserializeContext context): String → method IterableHelper.deserialize( DartType targetType, String expression, TypeHelperContext context): String
  • changed: method IterableHelper.serialize( DartType targetType, String expression, SerializeContext context): String → method IterableHelper.serialize(DartType targetType, String expression, TypeHelperContextWithConfig context): String
  • changed: method JsonConverterHelper.deserialize( DartType targetType, String expression, DeserializeContext context): Object → method JsonConverterHelper.deserialize( DartType targetType, String expression, TypeHelperContext context): Object
  • changed: method JsonConverterHelper.serialize( DartType targetType, String expression, SerializeContext context): LambdaResult → method JsonConverterHelper.serialize( DartType targetType, String expression, TypeHelperContext context): Object
  • changed: method JsonHelper.deserialize( DartType targetType, String expression, DeserializeContext context): String → method JsonHelper.deserialize(DartType targetType, String expression, TypeHelperContextWithConfig context): String
  • changed: method JsonHelper.serialize( DartType targetType, String expression, SerializeContext context): String → method JsonHelper.serialize(DartType targetType, String expression, TypeHelperContextWithConfig context): String
  • changed: method MapHelper.deserialize( DartType targetType, String expression, DeserializeContext context): String → method MapHelper.deserialize(DartType targetType, String expression, TypeHelperContextWithConfig context): String
  • changed: method MapHelper.serialize( DartType targetType, String expression, SerializeContext context): String → method MapHelper.serialize(DartType targetType, String expression, TypeHelperContextWithConfig context): String
  • changed: method TypeHelper.deserialize( DartType targetType, String expression, DeserializeContext context): Object → method TypeHelper.deserialize(DartType targetType, String expression, T context): Object
  • changed: method TypeHelper.serialize( DartType targetType, String expression, SerializeContext context): Object → method TypeHelper.serialize(DartType targetType, String expression, T context): Object
  • changed: method UriHelper.deserialize( DartType targetType, String expression, DeserializeContext context): String → method UriHelper.deserialize( DartType targetType, String expression, TypeHelperContext context): String
  • changed: method UriHelper.serialize( DartType targetType, String expression, SerializeContext context): String → method UriHelper.serialize( DartType targetType, String expression, TypeHelperContext context): String
  • changed: method ValueHelper.deserialize( DartType targetType, String expression, DeserializeContext context): String → method ValueHelper.deserialize( DartType targetType, String expression, TypeHelperContext context): String
  • changed: method ValueHelper.serialize( DartType targetType, String expression, SerializeContext context): String → method ValueHelper.serialize( DartType targetType, String expression, TypeHelperContext context): String
  • added: class BigIntHelper extends TypeHelper
  • added: class ConvertData
  • added: class TypeHelperContext: abstract
  • added: class TypeHelperContextWithConvert: abstract extends TypeHelperContext
  • added: ctor BigIntHelper()
  • added: ctor ConvertData(this.name, this.paramType)
  • added: field ConvertData.name: final String
  • added: field ConvertData.paramType: final DartType
  • added: get TypeHelperContext.classElement: ClassElement
  • added: get TypeHelperContext.fieldElement: FieldElement
  • added: get TypeHelperContext.nullable: bool
  • added: get TypeHelperContextWithConvert.deserializeConvertData: ConvertData
  • added: get TypeHelperContextWithConvert.serializeConvertData: ConvertData
  • added: method BigIntHelper.deserialize( DartType targetType, String expression, TypeHelperContext context): String
  • added: method BigIntHelper.serialize( DartType targetType, String expression, TypeHelperContext context): String
  • added: method TypeHelperContext.addMember(String memberContent): void
  • added: method TypeHelperContext.deserialize(DartType fieldType, String expression): Object
  • added: method TypeHelperContext.serialize(DartType fieldType, String expression): Object