//---------------------------------------------------------------------- static object CreateDefaultObject(System.Type type) { if (type.IsValueType) { return(Activator.CreateInstance(type)); } if (CanSerialiseEnumerable(type)) { var elementType = type.IsArray ? type.GetElementType() : type.GetGenericArguments()[0]; return(Activator.CreateInstance(typeof(List <>).MakeGenericType(new Type[] { elementType }))); } return(null); }
//---------------------------------------------------------------------- static bool CanSerialiseEnumerable(System.Type _type) { //array if (_type.IsArray) { return(CanSerialiseType(_type.GetElementType())); } //list<T> if (!_type.IsGenericType || _type.GetGenericTypeDefinition() != typeof(List <>)) { return(false); } var parameters = _type.GetGenericArguments(); if (parameters.Length > 1) { return(false); } return(CanSerialiseType(parameters[0])); }
//---------------------------------------------------------------------- static bool CanSerialiseGenericList(System.Type _type) { if (!SUPPORT_LISTS) { return(false); } if (!_type.IsGenericType || _type.GetGenericTypeDefinition() != typeof(List <>)) { return(false); } var parameters = _type.GetGenericArguments(); if (parameters.Length > 1) { return(false); } var param = !parameters[0].IsEnum ? parameters[0] : typeof(System.Enum); return(UnitySerialiseFieldByType.ContainsKey(param)); }