Esempio n. 1
0
 /// <summary>
 /// Get raw value by CSVColumnAttribute or name
 /// </summary>
 /// <param name="attribute"></param>
 /// <param name="fields"></param>
 /// <param name="keys"></param>
 /// <param name="name"></param>
 /// <returns></returns>
 private string GetRawValue(CSVColumnAttribute attribute, List <string> fields, List <string> keys, string name)
 {
     if (attribute.Column >= 0 && fields.Count > attribute.Column)
     {
         return(fields[attribute.Column]);
     }
     if (!string.IsNullOrEmpty(attribute.Key) && keys.Contains(attribute.Key))
     {
         return(fields[keys.IndexOf(attribute.Key)]);
     }
     if (keys.Contains(name))
     {
         return(fields[keys.IndexOf(name)]);
     }
     ZDebug.LogError(string.Format("Mapping Error! Column: {0}, Key: {1}, Name:{2}", attribute.Column,
                                   attribute.Key ?? "NULL", name));
     return(name);
 }
Esempio n. 2
0
        /// <summary>
        /// Decode single row
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="fields"></param>
        /// <param name="keys"></param>
        /// <returns></returns>
        private T DecodeRow <T>(List <string> fields, List <string> keys) where T : new()
        {
            T result = new T();
            IEnumerable <MemberInfo> members =
                typeof(T).GetMembers(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)
                .Where(m => m.MemberType == MemberTypes.Property || m.MemberType == MemberTypes.Field)
                .Where(m => Attribute.IsDefined(m, typeof(CSVColumnAttribute), false));

            if (typeof(T).IsValueType)
            {
                object boxed = result;
                foreach (MemberInfo member in members)
                {
                    CSVColumnAttribute attribute =
                        member.GetCustomAttributes(typeof(CSVColumnAttribute), false).First() as CSVColumnAttribute;
                    string field = GetRawValue(attribute, fields, keys, member.Name);
                    if (ReferenceEquals(field, member.Name))
                    {
                        return(result);
                    }
                    SetValue(member, boxed, field, attribute.DefaultValue, attribute.ArraySeparator, attribute.TrueValues);
                }
                return((T)boxed);
            }

            foreach (MemberInfo member in members)
            {
                CSVColumnAttribute attribute =
                    member.GetCustomAttributes(typeof(CSVColumnAttribute), false).First() as CSVColumnAttribute;
                string field = GetRawValue(attribute, fields, keys, member.Name);
                if (ReferenceEquals(field, member.Name))
                {
                    return(result);
                }
                SetValue(member, result, field, attribute.DefaultValue, attribute.ArraySeparator, attribute.TrueValues);
            }
            return(result);
        }