public SerializableArguement(System.Type type)
 {
     if (type.IsSubclassOf(typeof(UnityEngine.Object)))
     {
         _serializeType = ArguementSerializeType.Object;
         _string        = type.AssemblyQualifiedName;
     }
     else if (type.IsEnum)
     {
         _serializeType = ArguementSerializeType.Enum;
         _string        = type.AssemblyQualifiedName;
     }
     else
     {
         if (_typeToSerializeType.ContainsKey(type))
         {
             _serializeType = _typeToSerializeType[type];
             ArgTypeMeta argTypeMeta  = GetTypeMeta(_serializeType);
             object      defaultValue = null;
             if (type.IsValueType)
             {
                 defaultValue = System.Activator.CreateInstance(type);
             }
             argTypeMeta.onAssignValue(this, defaultValue);
         }
         else
         {
             throw new System.NotImplementedException("unsupport type:" + type);
         }
     }
 }
        private static ArgTypeMeta GetTypeMeta(ArguementSerializeType serializeType)
        {
            ArgTypeMeta result = null;

            _serializeTypeToMeta.TryGetValue(serializeType, out result);
            return(result);
        }