Serialização - Flutter SDK
Nesta página
O Atlas Device SDK para Flutter suporta serialização e desserialização de Extended JSON (EJSON) de e para objetos de Realm estáticos.
Tipos de dados suportados para serialização
Atualmente, o Flutter SDK suporta a serialização dos seguintes tipos de dados compatíveis:
Todos os tipos de dados de linguagem de gráfico
Todos os tipos de dados específicos do Realm, exceto Decimal128 e RealmValue
A tabela a seguir ilustra como os tipos de dados específicos do Realm do SDK são serializados com exemplos de saída:
Tipo de Realm | Serializa para |
---|---|
DateTime | Data
|
Lista de domínios | Array
|
RealmMap | Array
|
RealmSet | Array
|
ObjectId | ObjectId
|
UUID | Binário
|
Uint8List | Binário
|
Objeto | Documento
|
Para obter mais informações sobre a serialização de tipos não específicos do Realm, consulte Tipos de dados BSON e representações associadas.
Atualmente, a serialização do Flutter SDK não oferece suporte aos seguintes BSON types: Code, CodeWScope, DBPointer, DBRef, Expressão regular e Carimbo de data/hora.
Realm objetos de domínio
O codificador de documento completo do SDK permite serializar e desserializar classes definidas pelo usuário.
Para usar o codificador, crie seu modelo de objetos como faria normalmente usando a anotação @RealmModel()
. O modelo de classe RealmObject
criado por sua declaração part
fornece os métodos necessários para serialização e desserialização.
O seguinte modelo de objetos do Pet
será utilizado nos exemplos nesta 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 para EJSON
Para objetos baseados em RealmObject
classes , você pode serializar para EJSON usando o método toEjson() método das seguintes duas maneiras:
// 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 do EJSON
Deserializar do EJSON usando o fromEjson() método. O método usa EJSON para um tipo de objeto especificado como entrada e gera uma instância desserializada do tipo de objeto especificado.
O exemplo a seguir desserializa serializeByParam
do exemplo 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 não são do Realm
Para classes que não são do Realm, você pode usar a anotação @ejson
no construtor da classe para gerar um decodificador e um 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 codecs personalizados
O SDK também suporta codecs EJSON personalizados. Para usá-los em seu aplicativo, registre -se o codificador e decodificador EJSON personalizado para o tipo especificado.