У меня есть объект, который нужно сериализовать:
public class Employee {
string Name;
EmployeeData employeeData;
EmployeeSpecial employeeSpecial;
}
EmployeeData
и EmployeeSpecial
являются дочерними классами ScriptableObject
, которые уже сериализованы другим способом и имеют собственный форматигровой движок Unity3d.Поэтому единственное, что мне нужно для сериализации, - это ссылка на эти экземпляры.
Я создал класс поиска, который обрабатывает это.
public class ScriptableObjectDictionary: ScriptableObject
{
[Serializable]
public class ScriptableObjectEntry
{
public string Key;
public ScriptableObject ScriptableObject;
public ScriptableObjectEntry(string key, ScriptableObject obj)
{
Key = key;
ScriptableObject = obj;
}
}
public List<ScriptableObjectEntry> Dictionary;
public string GetKey(ScriptableObject obj) { ... }
public ScriptableObject GetObject(string key) { ... }
...
}
Это очень хорошо работает при реализации ISerializable
в классе Employee
в методе GetObjectData
и конструкторе.Поскольку я использую ScriptableObjects во многих классах, было бы более элегантно использовать SerializationSurrogate
для всех ScriptableObjects.
Вопрос в том, могу ли я создать SerializationSurrogate
для базового класса ScriptableObject
, который работает для всех дочерних классов без (!) Регистрации их всех отдельно с помощью SurrogateSelector
?Это важно, потому что моя игра расширяемая, и я не знаю всех ScriptableObject
потомков, которые нужно сериализовать.