ObjectDeliverer Ver 1.5.0リリース ObjectのJsonシリアライズ機能の強化
本日ObjectDelivererのVer 1.5.0をマーケットプレイスにリリースしました。
今回の実装内容はObjectのJsonシリアライズ機能の強化です。
これについては以前の記事に現状の課題として書いていました。
今回のリリースでは上記課題を改善する機能実装になります。
実装項目
以下の2項目を対応しました。
プロパティ名の変換
シリアライズ対象のクラスにIODConvertPropertyName
インターフェイスを実装することで、プロパティ名の変換ができるようになりました。
使用例)
// 変換前 { "Prop2": 1, "ObjProp": { "ValueB": 0, "ValueA": 0 }, "ObjProp2": { "ValueC": "abc" } } // 返還後 { "IntProperty": 1, "ObjectPropertyA": { "ValueB": 0, "ValueA": 0 }, "ObjectPropertyB": { "ValueC": "abc" } }
この機能を使うことで以下のようなことが可能になります
- FNameによる大文字小文字を区別できない問題の解消
- 対象クラスとJsonとで異なるプロパティ名にする
地味ですがじんわり役立つはず。
シリアライズフォーマットの選択
今回一番力を入れて実装した項目です。 Json内にクラス名を埋め込むことができるようになりました。
// クラス名を入れない従来の方式 { "Prop": 1 } // クラス名埋め込む方式 { "Type": "SampleClassName", "Body": { "Prop": 1 } }
これにより、以下のようなことが可能になります。
- 1つのDeliveryBoxで複数クラスのシリアライズ、デシリアライズ対応
- Object型のプロパティに派生クラスのインスタンスが入っている場合でも復元可能
またクラス名を埋め込む方式のみでは上記メリットがある一方で、文字数(データサイズ)が大きくなってしまうデメリットもあるため、Objectの型に応じて従来の方式と新方式を使い分けるオプションも用意しています。
例えば以下のようにあるプロパティのみクラス名を埋め込むといった使い方も可能です。
{ "Prop2": 1, "ObjProp": { "Type": "CustomObjB_C", "Body": { "ValueB": 2, "ValueA": 3 } }, "ObjProp2": { "ValueC": "abc" } }
まとめ
今回はObjectのJsonシリアライズ機能に焦点を絞って機能UPをしました。
まだ実装したいネタは他にもあるので、着々と機能UPするObjectDelivererをよろしくお願いします。