ObjectDeliverer Ver 1.5.0リリース ObjectのJsonシリアライズ機能の強化


本日ObjectDelivererのVer 1.5.0をマーケットプレイスにリリースしました。

ObjectDeliverer:ayumax:Code Plugins - UE4 マーケットプレイス

今回の実装内容はObjectのJsonシリアライズ機能の強化です。

これについては以前の記事に現状の課題として書いていました。

UObjectをJsonにシリアライズしよう - AYU MAX

今回のリリースでは上記課題を改善する機能実装になります。

実装項目

以下の2項目を対応しました。

プロパティ名の変換

How to change property name when serializing UObject with Json(Version 1.5.0 or later) · ayumax/ObjectDeliverer Wiki · GitHub

シリアライズ対象のクラスにIODConvertPropertyNameインターフェイスを実装することで、プロパティ名の変換ができるようになりました。

使用例)

// 変換前
{
    "Prop2": 1,
    "ObjProp":
    {
        "ValueB": 0,
        "ValueA": 0
    },
    "ObjProp2":
    {
        "ValueC": "abc"
    }
}

// 返還後
{
    "IntProperty": 1,
    "ObjectPropertyA":
    {
        "ValueB": 0,
        "ValueA": 0
    },
    "ObjectPropertyB":
    {
        "ValueC": "abc"
    }
}

この機能を使うことで以下のようなことが可能になります

地味ですがじんわり役立つはず。

シリアライズフォーマットの選択

Selection of Json serialize method in ObjectDeliveryBoxUsingJson(Version 1.5.0 later) · ayumax/ObjectDeliverer Wiki · GitHub

今回一番力を入れて実装した項目です。 Json内にクラス名を埋め込むことができるようになりました。

// クラス名を入れない従来の方式
{
    "Prop": 1
}

// クラス名埋め込む方式
{
    "Type": "SampleClassName",
    "Body":
    {
        "Prop": 1
    }
}

これにより、以下のようなことが可能になります。

またクラス名を埋め込む方式のみでは上記メリットがある一方で、文字数(データサイズ)が大きくなってしまうデメリットもあるため、Objectの型に応じて従来の方式と新方式を使い分けるオプションも用意しています。

例えば以下のようにあるプロパティのみクラス名を埋め込むといった使い方も可能です。

{
    "Prop2": 1,
    "ObjProp":
    {
        "Type": "CustomObjB_C",
        "Body":
        {
            "ValueB": 2,
            "ValueA": 3
        }
    },
    "ObjProp2":
    {
        "ValueC": "abc"
    }
}

まとめ

今回はObjectのJsonシリアライズ機能に焦点を絞って機能UPをしました。

まだ実装したいネタは他にもあるので、着々と機能UPするObjectDelivererをよろしくお願いします。


See also