Show / Hide Table of Contents

オブジェクトのシリアライズ

Lumino の Serialization モジュールは、任意のデータ型と文字列表現を可逆的に変換します。

Warning

現在サポートされているフォーマットは JSON 文字列のみとなっています。

オブジェクトと JSON 文字列のシリアライズ

serialize メソッドを追加する

シリアライズしたいクラスでどのフィールドをシリアライズするかを決めるために、serialize メソッドを実装します。

struct MyData
{
    String name;
    int value;

    void serialize(Archive& ar)
    {
        ar & LN_NVP(name);
        ar & LN_NVP(value);
    }
};

オブジェクトを文字列に変換する

JSON 文字列にシリアライズするには、JsonSerializer::serialize メソッドを使用します。

MyData data1;
data1.name = "example";
data1.value = 100;

String json = JsonSerializer::serialize(data1);
json    // => {"name":"example","value":100}

文字列をオブジェクトに変換する

JSON 文字列からオブジェクトへデシリアライズするには、JsonSerializer::deserialize メソッドを使用します。

MyData data2;
JsonSerializer::deserialize(json, data2);

data2.name  // => "example"
data2.value // => 100

Lumino で定義されているオブジェクトのシリアライズ

List や Path など、Lumino で定義されているオブジェクトは Serialization モジュールによるシリアライズをサポートしています。

Warning

0.5.0 時点では、特によく使うクラスを優先的にサポートしています。 今はサポートしていないクラスについても、今後のバージョンアップでサポートしていく予定です。

struct Documents
{
    String caption;
    List<Path> fileList;

    void serialize(Archive& ar)
    {
        ar & LN_NVP(caption);
        ar & LN_NVP(fileList);
    }
};

Documents docs;
docs.caption = "note";
docs.fileList.add("file1.md");
docs.fileList.add("file2.md");

String json = JsonSerializer::serialize(docs);
// {"caption":"note","fileList":["file1.md","file2.md"]}
In This Article
Back to top Copyright © 2017-2021 lriki