Menu Docs
Página inicial do Docs
/ /
Atlas Device SDKs
/ /

Serialização - Flutter SDK

Nesta página

  • Tipos de dados suportados para serialização
  • Realm objetos de domínio
  • Serializar para EJSON
  • Deserializar do EJSON
  • Serializar objetos que não são do Realm
  • Registrar codecs personalizados

O Atlas Device SDK para Flutter suporta serialização e desserialização de Extended JSON (EJSON) de e para objetos de Realm estáticos.

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

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

Lista de domínios

Array

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

RealmMap

Array

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

RealmSet

Array

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

ObjectId

ObjectId

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

UUID

Binário

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

Uint8List

Binário

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

Objeto

Documento

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

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.

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

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

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

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.

Voltar

Congelar dados