public void AddValue(string name, object value, System.Type tp)
        {
            if (!this.Ready) throw new System.InvalidOperationException(EXCEPTION_INVALIDSTATE_MSG);
            if (value != null && !TypeUtil.IsType(value.GetType(), tp)) throw new TypeArgumentMismatchException(value.GetType(), tp, "Value must be of the type specified.", "value");

            if (TypeUtil.IsType(tp, typeof(UnityEngine.Object)))
            {
                this.AddUnityObjectReference(name, value as UnityEngine.Object);
            }
            else if (tp.IsListType(true))
            {
                this.AddList(name, value as System.Collections.IList, tp.GetElementTypeOfListType(), tp.IsArray);
            }
            else
            {
                _currentInfo.AddValue(name, value, tp);
            }
        }
        public object GetValue(string name, System.Type tp)
        {
            if (!this.Ready) throw new System.InvalidOperationException(EXCEPTION_INVALIDSTATE_MSG);

            if(TypeUtil.IsType(tp, typeof(UnityEngine.Object)))
            {
                return this.GetUnityObjectReference(name);
            }
            else if(tp.IsListType(true))
            {
                var value = _currentInfo.GetValue(name, typeof(DummyList)) as DummyList;

                if(value != null)
                {
                    return value.List;
                }
                else
                {
                    return null;
                }
            }
            else
            {
                return _currentInfo.GetValue(name, tp);
            }
        }