Skip to content

Commit 2cfe92a

Browse files
authored
Fix encoding nullable values with converters, prepare for release (#1231)
Fixes #1229
1 parent 227da7a commit 2cfe92a

File tree

7 files changed

+74
-4
lines changed

7 files changed

+74
-4
lines changed

json_serializable/CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
## 6.5.4
2+
3+
- Fixed handling of nullable fields with converters which return non-nullable
4+
values.
5+
16
## 6.5.3
27

38
- Fixed handling of nullable `enum` fields with `includeIfNull: false`.

json_serializable/lib/src/encoder_helper.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,7 @@ abstract class EncodeHelper implements HelperCore {
178178
hasConverterNullEncode(field.type, helperContext);
179179

180180
if (nullableEncodeConverter != null) {
181-
return !nullableEncodeConverter;
181+
return !nullableEncodeConverter && !field.type.isNullableType;
182182
}
183183

184184
// We can consider enums as kinda like having custom converters

json_serializable/pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
name: json_serializable
2-
version: 6.5.3
2+
version: 6.5.4
33
description: >-
44
Automatically generate code for converting to and from JSON by annotating
55
Dart classes.

json_serializable/test/integration/converter_examples.dart

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,3 +95,27 @@ class _Issue1202RegressionNotNullConverter extends JsonConverter<int, String> {
9595
@override
9696
String toJson(int object) => object.toString();
9797
}
98+
99+
class DateTimeConverter extends JsonConverter<DateTime, String> {
100+
const DateTimeConverter();
101+
@override
102+
DateTime fromJson(String json) => DateTime.parse(json).toLocal();
103+
@override
104+
String toJson(DateTime object) => object.toUtc().toIso8601String();
105+
}
106+
107+
@JsonSerializable()
108+
@DateTimeConverter()
109+
class Regression1229 {
110+
@JsonKey(includeIfNull: false)
111+
final DateTime? date;
112+
113+
Regression1229({
114+
this.date,
115+
});
116+
117+
factory Regression1229.fromJson(Map<String, dynamic> json) =>
118+
_$Regression1229FromJson(json);
119+
120+
Map<String, dynamic> toJson() => _$Regression1229ToJson(this);
121+
}

json_serializable/test/integration/converter_examples.g.dart

Lines changed: 34 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

json_serializable/test/integration/integration_test.dart

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -419,4 +419,9 @@ void main() {
419419
final instance = Issue1226Regression(durationType: null);
420420
expect(instance.toJson(), isEmpty);
421421
});
422+
423+
test('Regression1229', () {
424+
final instance = Regression1229();
425+
expect(instance.toJson(), isEmpty);
426+
});
422427
}

json_serializable/test/kitchen_sink/kitchen_sink.g_exclude_null.g.dart

Lines changed: 4 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)