ISerializationSurrogate для базового класса многих наследников - PullRequest
0 голосов
/ 11 октября 2018

У меня есть объект, который нужно сериализовать:

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 потомков, которые нужно сериализовать.

...