Этот вопрос связан с this post.Как создать json кодируемые классы в дротике
Я попытался следующий код:
import 'dart:convert';
/*server side Post class */
class Post {
int post_id;
String title;
String description;
DateTime posted_at;
DateTime last_edited;
String user;
String editor;
int up_votes;
int down_votes;
int total_votes;
String links_to;
List<String> tags = new List();
Post.fromSQL(List sql_post) {
//initialization code, unrelated.
}
Map toJson(){
Map fromObject = {
'post_id' : post_id,
'title' : title,
'description' : description,
'posted_at' : posted_at,
'last_edited' : last_edited,
'user' : user,
'editor' : editor,
'up_votes' : up_votes,
'dwon_votes' : down_votes,
'total_votes' : total_votes,
'links_to' : links_to,
'tags' : tags
};
return fromObject;
//I use the code below as a temporary solution
//JSON.encode(fromObject, toEncodable: (date)=>date.toString());
}
}
У меня есть временное решение, но я действительно хотел бы быть в состоянии сделать следующее.
JSON.encode(posts, toEncodable: (date)=>date.toString())
где posts
список постовских объектов. Я бы ожидал, что это преобразуется в json-список json-представлений класса Post. Я получаю список строк "Instance of 'Post'"
. Итак, вопрос в том, что этот синтаксис больше не поддерживается, или я должен делать что-то по-другому?
I неправильно поняли документацию. Я боролся с 'toEncodable' запускается на тех подэлементах объекта, который был возвращен toJson(), которые не кодируются. Я решил это, слегка изменив карту следующим образом: '' posted_at ': posted_at.toIso8601String(),' last_edited ': last_edited.toIso8601String(), 'и полностью удалил' toEncodable'. – Lukasz
Это было бы неплохо, но, похоже, не так. Разумеется, это тоже хорошее решение. –
Функция 'toEncodable' - это функция, которую нельзя использовать, нет другого резерва для объекта unencodable. Вызов 'toJson' - это только функция' toEncodable' по умолчанию, если вы не предоставляете другую. – lrn