ObjectDeliveryBoxUsingJsonの利用方法
バージョン1.5.0以降では、UObjectのJSONシリアライズ形式を以下の2種類から選択できます。
- クラス名を含まない(従来の形式)
{
"Prop": 1
}
- クラス名を含む
{
"Type": "SampleClassName",
"Body":
{
"Prop": 1
}
}
従来の方式だとJSONの中にクラス名がなかったので、複数のクラスを扱うことができませんでした。
JSONの中にクラス名を含めることで、1つのDeliveryBoxで複数の型をシリアライズ・デシリアライズできるようになります。 基底クラスの型のプロパティとしてオブジェクトを持っている場合でも、情報が失われることはありません。
ただし、クラス名がオブジェクトごとに保存されるため、JSONの文字数(データサイズ)は増加します。
シリアライゼーション方法の選択
以下のBlueprintのシリアライゼーションの場合で説明いたしますわ

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

クラス名を含まない(従来の形式)場合
Create Object Delivery Box Using Json を使用してDelivery Boxを作成します。

以下の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を作成します。

以下の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を含めるかどうかを選択できます。

以下の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に設定する