Docs Menu
Docs Home
/ /
Atlas Device SDK
/ /

シリアル化 - Flutter SDK

項目一覧

  • 直列化でサポートされているデータ型
  • Realm オブジェクトの直列化
  • EJSON への直列化
  • EJSON からの逆シリアル化
  • 非 Realm オブジェクトの直列化
  • カスタム コーデックの登録

Atlas Device SDK for Flutter は、静的 Realm オブジェクトへの拡張 JSON(EJSON)の直列化と逆直列化をサポートしています。

Flutter SDK は現在、サポートされている次のデータ型の直列化をサポートしています。

  • すべての Dart 言語データ型

  • すべての Realm 固有のデータ型(10 進128と RealmValue を除く)

次の表は、SDK の Realm 固有のデータ型が出力例とともにどのように直列化されるかを示しています。

Realm タイプ
に直列化
日時

日付

DateTime birthDate = DateTime.utc(2024, 4, 10) に直列化 birthDate: {$date: {$numberLong: 1712707200000}}

RealmList

配列

List<String> listOfStrings = [food, water] に直列化 listOfStrings: [food, water]

RealmMap

配列

Map<String, int> mapOfMixedAnyValues = {'first': 123 , 'second': 567} に直列化 mapOfValues: {first: {$numberInt: 123}, second: {$numberInt: 567}}

RealmSet

配列

Set<int> setOfInts = {0, 1, 2, 3} に直列化 setOfInts: [{$numberInt: 0}, {$numberInt: 1}, {$numberInt: 2}, {$numberInt: 3}]

ObjectId

ObjectId

ObjectId id = ObjectId() に直列化 {id: {$oid: 666a6fd54978af08e54a8d52}

UUID

バイナリ

Uuid myId = Uuid.v4() に直列化 myId: {$binary: {base64: 6TvsMWxDRWa1jSC6gxiM3A==, subType: 04}}

Uint8List

バイナリ

Uint8List aBinaryProperty = Uint8List.fromList([1, 2]) に直列化 aBinaryProperty: {$binary: {base64: AQI=, subType: 00}}

オブジェクト

ドキュメント

Address address = Address("500 Dean Street", "Brooklyn", "NY", "USA") に直列化 address: {street: 500 Dean Street, city: Brooklyn, state: NY, country: USA}

Realm 以外の固有のタイプの直列化の詳細については、「 BSON データ型と関連表現 」を参照してください。

Flutter SDKシリアル化は現在、次のBSON typesをサポートしていません。コード、CodeWscope、DBPointer、DBRef、正規表現、タイムスタンプ。

SDK のフルドキュメント エンコードでは、ユーザー定義クラスを直列化および逆直列化できます。

エンコードを使用するには、通常、 @RealmModel()アノテーションを使用するのと同様にオブジェクトモデルを作成します。 part宣言によって作成されたRealmObjectクラスモデルは、直列化と逆直列化に必要なメソッドを提供します。

このページの例では、次のPetオブジェクトモデルを使用します。

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

クラスに基づくオブジェクトでは、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
}

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 以外のクラスの場合は、クラス コンストラクタの@ejsonアノテーションを使用してデコードとエンコードを生成できます。

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

SDK はカスタム EJSON コーデックもサポートしています。 アプリ で使用するには、 指定された型のカスタム EJSON エンコードとデコード。

戻る

データの固定