序列化- Flutter SDK
适用于 Flutter 的Atlas Device SDK支持将扩展JSON (EJSON)与静态Realm对象进行序列化和反序列化。
支持序列化的数据类型
Flutter SDK目前支持以下数据类型的序列化:
所有 Dart 语言数据类型
除 Decimal 128和 RealmValue 之外的所有 Realm 特定数据类型
下表通过输出示例说明了 SDK 的特定 Realm 数据类型如何进行序列化:
Realm类型 | 序列化到 |
---|---|
日期时间 | Date
|
RealmList | 阵列
|
RealmMap | 阵列
|
RealmSet | 阵列
|
ObjectId | ObjectId
|
UUID | 二进制文件
|
Uint8List | 二进制文件
|
对象 | 文档
|
有关非 Realm 特定类型序列化的更多信息,请参阅BSON数据类型和关联表示形式。
Flutter SDK序列化目前不支持以下BSON types :Code、CodeWScope、DBPointer、DBRef、正则表达式和 Timestamp。
序列化Realm对象
SDK 的全文档编码器使您能够序列化和反序列化用户定义的类。
要使用编码器,请像平常使用@RealmModel()
注解一样创建对象模型。 由part
声明创建的RealmObject
类模型提供了序列化和反序列化所需的方法。
本页的示例将使用以下Pet
对象模型:
import 'package:realm_dart/realm.dart'; part 'pet.realm.dart'; ()class _Pet { late String type; late int numberOfLegs; late DateTime birthDate; late double? price; }
序列EJSON
对于基于RealmObject
类的对象,您可以使用 toEjson() 序列化为EJSON 方法可通过以下两种方式实现:
// 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 }
从EJSON反序列化
使用 fromEjson() 从EJSON反序列化 方法。该方法将指定对象类型的EJSON作为输入,并输出指定对象类型的反序列化实例。
以下示例对上一示例中的serializeByParam
进行反序列化:
// Pass the serialized object to the method final deserializeFromEjsonWithExplicitType = fromEJson<Pet>(serializeByParam); // The method can also infer the object type Pet deserializeFromEjson = fromEJson(serializeByParam);
序列化非 Realm 对象
对于非 Realm 类,您可以在类构造函数上使用@ejson
注解来生成解码器和编码器:
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}); }
注册自定义编解码器
该 SDK 还支持自定义EJSON编解码器。 要在您的应用中使用它们,请 注册 指定类型的自定义EJSON编码器和解码器。