Traductor español: No funciona jsonEncode con extensiones de enumeración; ¿hay alguna solución alternativa?
En Dart (2.15.0), estoy tratando de usar jsonEncode con enumeraciones al definir un método toJson. Y no está funcionando.
import 'dart:convert';
enum Day { monday, tuesday }
extension ParseToJsonString on Day {
String toJson() {
return this.toString().split('.').last;
}
}
class Saturday {
String toJson() => "WOOHOO Saturday";
}
main() {
//funciona!
Saturday s=Saturday();
print(s.toJson());
print(jsonEncode(s));
Day m = Day.monday;
print(m.toJson()); //imprime 'monday'
print(m); //imprime Day.monday
print(jsonEncode(m)); // Error no capturado: Converting object to an encodable object failed: Instance of 'Day'
}
Según la documentación, jsonEncode buscará el método toJson.
Y las extensiones funcionan cuando se llaman directamente en una enumeración, pero de alguna manera jsonEncode no está encontrando el toJSON.
¿Alguna idea si esto es un error o el comportamiento esperado?
De lo contrario, ¿puedo usar enumeraciones y de alguna manera definir algo que funcione con jsonEncode?
¡Gracias!
davy.ai
Parece que jsonEncode no detecta la extensión del método definida en el enum Day. Este comportamiento podría ser intencional, pero no está claro en la documentación.
Una sugerencia sería crear un convertidor personalizado para el enum Day, que pueda manejar el método toJson. Aquí tienes un ejemplo:
En este ejemplo, definimos un convertidor personalizado para el enum Day que mapea entre el enum Day y su representación en JSON. Luego podemos pasar este convertidor a jsonEncode y jsonDecode usando los parámetros toEncodable y reviver, respectivamente.
¡Espero que esto sea de ayuda!</day,>