Beispiel #1
0
    public T CreateItem <T>(string id) where T : class, new()
    {
        TypeReadResult init = tagMap.Get(id);

        if (init == null)
        {
            return(null);
        }
        if (!init.type.IsAssignableFrom(typeof(T)))
        {
            return(null);
        }
        T retn = GetInstance(init) as T;

        for (int i = 0; i < toClear.Count; i++)
        {
            IEntityDeserializable d = toClear[i].instance as IEntityDeserializable;
            if (d != null)
            {
                d.AfterDeserialize();
            }
            toClear[i].instance = null;
        }
        toClear.Clear();
        return(retn);
    }
    public T DeserializeInto <T>(string id, T instance) where T : class
    {
        TypeReadResult init = tagMap.Get(id);

        //temporarily swap ref id to point at instance, be sure to put it back
        //for the next call to CreateItem or it will crash
        if (init == null)
        {
            return(null);
        }
        init.instance = instance;
        context       = init;
        TypeReadResult currentContext = context;

        SerializerUtil.GetTypeSerializer(init.type).Deserialize(instance, this);
        init.instance = instance;
        context       = currentContext;
        toClear.Add(init);
        for (int i = 0; i < toClear.Count; i++)
        {
            IEntityDeserializable d = toClear[i].instance as IEntityDeserializable;
            if (d != null)
            {
                d.AfterDeserialize();
            }
            toClear[i].instance = null;
        }
        toClear.Clear();
        return(instance);
    }