ObjectDeliveryBoxUsingJsonの利用方法

バージョン1.5.0以降では、UObjectのJSONシリアライズ形式を以下の2種類から選択できます。

  • クラス名を含まない(従来の形式)
{
    "Prop": 1
}
  • クラス名を含む
{
    "Type": "SampleClassName",
    "Body":
    {
        "Prop": 1
    }
}

従来の方式だとJSONの中にクラス名がなかったので、複数のクラスを扱うことができませんでした。

JSONの中にクラス名を含めることで、1つのDeliveryBoxで複数の型をシリアライズ・デシリアライズできるようになります。 基底クラスの型のプロパティとしてオブジェクトを持っている場合でも、情報が失われることはありません。

ただし、クラス名がオブジェクトごとに保存されるため、JSONの文字数(データサイズ)は増加します。

シリアライゼーション方法の選択

以下のBlueprintのシリアライゼーションの場合で説明いたしますわ

ODConvertPropertyName3

  • このBlueprintのクラス名は CustomObject1
  • Integer型の Prop2 という名前のプロパティを持つ
  • CustomObjA型の ObjProp という名前のプロパティを持つ
  • ObjProp には CustomObjB のインスタンスが含まれる
  • CustomObjB は CustomObjA を継承している
  • CustomObjC型の ObjProp2 という名前のプロパティを持つ

ObjA ObjB ObjC

クラス名を含まない(従来の形式)場合

Create Object Delivery Box Using Json を使用してDelivery Boxを作成します。

boxStatic

以下のJSONテキストにシリアライズされます

{
    "Prop2": 1,
    "ObjProp":
    {
        "ValueB": 2,
        "ValueA": 3
    },
    "ObjProp2":
    {
        "ValueC": "abc"
    }
}
  • クラス名は保存されない
  • デシリアライズ時には、対象クラス(CustomObject1)を指定する必要がある
  • ObjProp は CustomObjA 型として復元されるため、CustomObjB で実装された ValueB は復元されない

クラス名を含む場合

Create Dynamic Object Delivery Box Using Json を使用してDelivery Boxを作成します。

boxDynamic

以下のJSONテキストにシリアライズされます

{
    "Type": "CustomObject1_C",
    "Body":
    {
        "Prop2": 1,
        "ObjProp":
        {
            "Type": "CustomObjB_C",
            "Body":
            {
                "ValueB": 2,
                "ValueA": 3
            }
        },
        "ObjProp2":
        {
            "Type": "CustomObjC_C",
            "Body":
            {
                "ValueC": "abc"
            }
        }
    }
}
  • クラス名が保存される
  • デシリアライズ時に対象クラス(CustomObject1)を指定する必要がない
  • ObjProp は “CustomObjB” 型として復元されるため、“CustomObjB” で実装された ValueB も復元される

カスタム形式(クラスごとに切り替え)の利用

Create Custom Object Delivery Box Using Json を使用してDelivery Boxを作成します。

これによりクラスごとに、クラスのTypeを含めるかどうかを選択できます。

image

以下のJSONテキストにシリアライズされます(上記の画像設定の場合)

{
    "Prop2": 1,
    "ObjProp":
    {
        "Type": "CustomObjB_C",
        "Body":
        {
            "ValueB": 2,
            "ValueA": 3
        }
    },
    "ObjProp2":
    {
        "ValueC": "abc"
    }
}
  • デフォルトのシリアライゼーション方法タイプを Default Serializer Type に設定する
  • Default Serializer Type に No Write Type を指定した場合は、必ず Target Class を指定する必要がある
  • プロパティのオブジェクトクラスとシリアライゼーション方法タイプをペアで Object Serializer Types に設定する