El Atlas Device SDK para Flutter admite la serialización y deserialización de JSON extendido (EJSON) hacia y desde objetos Realm estáticos.
Tipos de datos admitidos para la serialización
El SDK de Flutter actualmente soporta la serialización de los siguientes tipos de datos soportados:
Todos los tipos de datos del lenguaje Dart
Todos los tipos de datos específicos de Realm, excepto Decimal128 y RealmValue
La siguiente tabla ilustra cómo se serializan los tipos de datos específicos de Realm del SDK con ejemplos de salida:
Tipo de reino | Serializa a |
|---|---|
Fecha y hora | fecha
|
Lista de reinos | Arreglo
|
Mapa del reino | Arreglo
|
Conjunto de reinos | Arreglo
|
ObjectId | ObjectId
|
UUID | Binario
|
Lista Uint8 | Binario
|
Objeto | Documento
|
Para obtener más información sobre la serialización de tipos no específicos de Realm, consulte Tipos de datos BSON y representaciones asociadas.
La serialización del SDK de Flutter actualmente no admite los siguientes tipos de BSON: Código, CodeWScope, DBPointer, DBRef, Expresión regular y Marca de tiempo.
Serializar objetos de Realm
El codificador de documentos completo del SDK le permite serializar y deserializar clases definidas por el usuario.
Para usar el codificador, cree su modelo de objeto como lo haría normalmente con la anotación @RealmModel(). El modelo de clase RealmObject creado por su declaración part proporciona los métodos necesarios para la serialización y la deserialización.
El siguiente modelo de objeto Pet se utilizará en los ejemplos de esta página:
import 'package:realm_dart/realm.dart'; part 'pet.realm.dart'; () class _Pet { late String type; late int numberOfLegs; late DateTime birthDate; late double? price; }
Serializar a EJSON
Para objetos basados en RealmObject clases, puede serializarlos en EJSON usando toEjson() método de las dos maneras siguientes:
// Pass the object as a parameter to the method EJsonValue serializeByParam = toEJson(spider); // Call the method directly on the object EJsonValue serializeWithCall = spider.toEJson();
{ type: Jumping Spider, numberOfLegs: {$numberInt: 8}, birthDate: {$date: {$numberLong: 1712707200000}}, price: null }
Deserializar desde EJSON
Deserialice desde EJSON usando el método fromEjson(). El método toma EJSON para un tipo de objeto Realm específico como entrada y emite una instancia deserializada del tipo de objeto Realm específico.
El siguiente ejemplo deserializa serializeByParam del ejemplo anterior:
// Pass the serialized object to the method final deserializeFromEjsonWithExplicitType = fromEJson<Pet>(serializeByParam); // The method can also infer the object type Pet deserializeFromEjson = fromEJson(serializeByParam);
Serializar objetos que no pertenecen al reino
Para clases que no sean de Realm, se puede usar la anotación @ejson en el constructor de la clase para generar un decodificador y un codificador:
class Person { final String name; final DateTime birthDate; final int? age; final double income; final Person? spouse; // annotate constructor to generate decoder and encoder Person(this.name, this.birthDate, this.income, {this.spouse, this.age}); }
Registrar códecs personalizados
El SDK también admite códecs EJSON personalizados. Para usarlos en tu aplicación, registra el codificador y decodificador EJSON personalizados para el tipo especificado.