jsonTreeDecode method
Converts the argument (a JSON tree) into an instance of T
.
Valid nodes in JSON trees
The method takes a tree, where nodes are instances of:
null
bool
double
String
List
, where items are valid nodes.Map<String,Object?>
, where keys are strings and values are valid nodes.
Errors
Thrown errors are subclasses of GraphNodeError, which describes which node in the input graph caused the error.
Examples
import 'package:kind/kind.dart';
void main() {
final json = '2020-12-31';
final kind = DateKind();
kind.jsonTreeDecode(json); // --> Date(2020, 12, 31)
}
Implementing this method
Implementations must use context
to:
- Serialize other values.
- Construct errors.
If context
is null, implementations must construct one with
JsonDecodingContext().
Implementation
@override
DateTimeWithTimeZone jsonTreeDecode(Object? json,
{JsonDecodingContext? context}) {
if (json is String) {
final dateTimeWithTimeZone = DateTimeWithTimeZone.tryParse(json);
if (dateTimeWithTimeZone == null) {
context ??= JsonDecodingContext();
throw context.newGraphNodeError(
value: json,
reason: 'Invalid format',
);
}
return dateTimeWithTimeZone;
} else {
context ??= JsonDecodingContext();
throw context.newGraphNodeError(
value: json,
reason: 'Expected JSON string.',
);
}
}