シリアル化 - Flutter SDK
Atlas Device SDK for Flutter は、静的 Realm オブジェクトへの拡張 JSON(EJSON)の直列化と逆直列化をサポートしています。
直列化でサポートされているデータ型
Flutter SDK は現在、サポートされている次のデータ型の直列化をサポートしています。
すべての Dart 言語データ型
すべての Realm 固有のデータ型(10 進128と RealmValue を除く)
次の表は、SDK の Realm 固有のデータ型が出力例とともにどのように直列化されるかを示しています。
Realm タイプ | に直列化 |
---|---|
日時 | 日付
|
RealmList | 配列
|
RealmMap | 配列
|
RealmSet | 配列
|
ObjectId | ObjectId
|
UUID | バイナリ
|
Uint8List | バイナリ
|
オブジェクト | ドキュメント
|
Realm 以外の固有のタイプの直列化の詳細については、「 BSON データ型と関連表現 」を参照してください。
Flutter SDKシリアル化は現在、次のBSON typesをサポートしていません。コード、CodeWscope、DBPointer、DBRef、正規表現、タイムスタンプ。
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 に直列化できます メソッドを使用して、次の 2 つの方法で実行します。
// 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 エンコードとデコード。