Docs Menu
Docs Home
/ /
Base de datos de reinos

Serialización - SDK de Flutter

El Atlas Device SDK para Flutter admite la serialización y deserialización de JSON extendido (EJSON) hacia y desde objetos Realm estáticos.

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

DateTime birthDate = DateTime.utc(2024, 4, 10) se serializa a birthDate: {$date: {$numberLong: 1712707200000}}

Lista de reinos

Arreglo

List<String> listOfStrings = [food, water] se serializa a listOfStrings: [food, water]

Mapa del reino

Arreglo

Map<String, int> mapOfMixedAnyValues = {'first': 123 , 'second': 567} se serializa a mapOfValues: {first: {$numberInt: 123}, second: {$numberInt: 567}}

Conjunto de reinos

Arreglo

Set<int> setOfInts = {0, 1, 2, 3} se serializa a setOfInts: [{$numberInt: 0}, {$numberInt: 1}, {$numberInt: 2}, {$numberInt: 3}]

ObjectId

ObjectId

ObjectId id = ObjectId() se serializa a {id: {$oid: 666a6fd54978af08e54a8d52}

UUID

Binario

Uuid myId = Uuid.v4() se serializa a myId: {$binary: {base64: 6TvsMWxDRWa1jSC6gxiM3A==, subType: 04}}

Lista Uint8

Binario

Uint8List aBinaryProperty = Uint8List.fromList([1, 2]) se serializa a aBinaryProperty: {$binary: {base64: AQI=, subType: 00}}

Objeto

Documento

Address address = Address("500 Dean Street", "Brooklyn", "NY", "USA") se serializa a address: {street: 500 Dean Street, city: Brooklyn, state: NY, country: USA}

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.

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';
@RealmModel()
class _Pet {
late String type;
late int numberOfLegs;
late DateTime birthDate;
late double? price;
}

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
}

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);

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;
@ejson // annotate constructor to generate decoder and encoder
Person(this.name, this.birthDate, this.income, {this.spouse, this.age});
}

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.

Volver

Congelar datos

En esta página