Прочитать с JSON файла объекты, которые наследуются от абстрактного класса в Unity
Есть абстрактный класс EnemyAttackDATA и три дочерних класса: Bite, Fist, ZapBall
Хочу, чтобы при чтении файла JSON объект типа EnemyAttackDATA преобразовывался к нужному типу, так как происходит здесь:
EnemyAttackDATA e1 = new Bite();
Debug.Log(e1.GetType()); // Bite
e1 = new Fist();
Debug.Log(e1.GetType()); // Fist
Я использую JsonUtility
UPD: Насчет моей проблемы, то во-первых: Ни JsonUtility от Unity, ни другие классы для чтения JSON не позволяют это:
EnemyAttackDATA e = JsonUtility.FromJson<EnemyAttackDATA>(path) т.к. EnemyAttackDATA - абстрактный класс
Во-вторых мне нужно, чтобы JsonUtility сам понимал, какой класс хранится в JSON и возвращал объект типа Bite, Fist, ZapBall в зависимости от того, что хранится в JSON
Ответы (1 шт):
Во время сериализации:
JsonSerializerSettings settings = new JsonSerializerSettings
{
TypeNameHandling = TypeNameHandling.All
};
string tojson = JsonConvert.Serialize(json, settings);
File.WriteAllText("file.json", json);
Теперь в файле json указан тип:
{
"$type":"Bite, Assembly CSharp",
"Coeficient":1.0,
"Name":"Bite",
"Description":"",
"TimeToActivate":0.0,
"SizeOfCollider":0.0,
"Speed":0.0
}
Во время десериализации:
EnemyAttackDATA enemy = JsonConvert.DeserializeObject<EnemyAttackDATA>(json, settings); //те же настройки
Debug.Log(enemy.GetType()); //Bite
Я использовал Newtonsoft.Json dll