リフレクションを使用せずにGetType()やType変数でキャストするには?
UnityのC#でゲームを作っています。
IL2CPPという64ビットC++ビルドになった事でリフレクションを使用しないことになりました。
API通信周りを作成するに当たり、リフレクションを使用せず
API受信データをベースとなるレスポンスクラスを継承した固有のクラスで
キャストする必要があり、どうしてもできなかったのでテスト用クラスを
作ってやってみようと思ったのですが方法がわからず悩んでおります。
下記クラスがあります。
・基底クラスA
・Aを継承したクラスBとC
・LitJsonをシリアライズ・デシリアライズするテスト用クラスJsonTestManager
・呼び出し元クラスをOnDebug
OnDebug内のOnClickButtonが実行されると
ClassBとClassCにデータ作成され、
わざとJsonTestManagerにあるClassA型のバッファにデータをセットしています。
下記部分で継承先の型を指定したいのですがどのようにして良いかわかりません。
UnityだとC#3.0までなのでDynamaicが使用できず、リフレクションも使用不可になったので
継承先のレスポンス型が変わった時に対応できないような状況です。
testClassCC = LitJson.JsonMapper.ToObject<継承先の型>(str);
■ClassA
using UnityEngine;
using System.Collections;
public class ClassA
{
public int aaa;
public int bbb;
}
■ClassB
using UnityEngine;
using System.Collections;
public class ClassB : ClassA
{
public string test1;
public string test2;
}
■ClassC
using UnityEngine;
using System.Collections;
public class ClassC : ClassA
{
public string test3;
public string test4;
}
■JsonTestManager
using UnityEngine;
using System.Text;
using System.Collections;
using LitJson;
public class JsonTestManager
{
public ClassA testClassB;
public ClassA testClassC;
public ClassA testClassCC;
public void JsonTest()
{
// 送信用データJsonStringに変換
string litjsonString = LitJson.JsonMapper.ToJson(testClassC);
byte[] postBytes = Encoding.Default.GetBytes(litjsonString);
string str = Encoding.UTF8.GetString(postBytes);
testClassCC = LitJson.JsonMapper.ToObject<継承先の型>(str);
}
}
■呼び出し元クラスOnDebug--ボタンをタップするとOnClickButton()がコールされる。
using UnityEngine;
using System.Collections;
public class OnDebug
{
public JsonTestManager jsonTestManager = new JsonTestManager();
public void OnClickButton()
{
ClassB classB = new ClassB();
classB.test1 = "test1";
classB.test2 = "test2";
ClassC classC = new ClassC();
classC.test3 = "test3";
classC.test4 = "test4";
jsonTestManager.testClassB = classB;
jsonTestManager.testClassC = classC;
jsonTestManager.testClassCC = classC;
jsonTestManager.JsonTest();
}
}