ISerializationSurrogate用于许多继承者的基类

时间:2018-10-11 12:00:55

标签: c# unity3d serialization deserialization

我有一个需要序列化的对象:

public class Employee {
    string Name;
    EmployeeData employeeData;
    EmployeeSpecial employeeSpecial;
}

EmployeeDataEmployeeSpecial都是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,所以对所有ScriptableObjects使用SerializationSurrogate会更加优雅。

问题是,我是否可以为适用于所有子类的基类SerializationSurrogate创建一个ScriptableObject,而无需(!)在SurrogateSelector中单独注册它们?这很重要,因为我的游戏是可扩展的,而且我不知道需要序列化的所有ScriptableObject个孩子。

0 个答案:

没有答案