How does built_value deserialize json array to object array?
1,168
according to @David Morgan 's reply, built_value is not support deserialize a list yet.
Currently there’s no equivalent to deserializeWith for a list. You’ll need to deserialize one by one.
Author by
walker
Updated on December 06, 2022Comments
-
walker over 1 year
In built_value's official example show how to setup an array member of an object:
abstract class Collections implements Built<Collections, CollectionsBuilder> { static Serializer<Collections> get serializer => _$collectionsSerializer; BuiltList<int> get list; BuiltMap<String, int> get map; BuiltListMultimap<int, bool> get listMultimap; factory Collections([updates(CollectionsBuilder b)]) = _$Collections; Collections._(); }
it just demonstrate how to deserialize a map but not array, the array just a key/member not the data itself.
but in may case, my http response is an array itself, not play as a member of the response.
my model:
abstract class Post implements Built<Post, PostBuilder> { static Serializer<Post> get serializer => _$postSerializer; int get userId; String get title; factory Post([updates(PostBuilder b)]) = _$Post; Post._(); }
my request is:
static Future<List<Post>> getPosts() async { final response = await http.get('https://jsonplaceholder.typicode.com/posts'); if (response.statusCode == 200) { return serializers.deserialize( json.decode(response.body), specifiedType: FullType(Post) ); } else { throw Exception('Failed to load post'); } }
response.body:
[ {'userId': 1, 'title': 'title1'}, {'userId': 2, 'title': 'title2'} ]
I looked up every tutorial or network discussion, no one mentions this scenario, or should I can only iterate the
response.body
and deserialize to object one by one? for example:static Future<List<Post>> getPosts() async { final response = await http.get('https://jsonplaceholder.typicode.com/posts'); if (response.statusCode == 200) { final List<dynamic> data = json.decode(response.body); return data.map((m){ return serializers.deserializeWith(Post.serializer, m); }).toList(); } else { throw Exception('Failed to load post'); } }
-
Ilia Kurtov over 5 yearsPossible duplicate of Dart Built Value Deserialize List of Objects
-