Esempio n. 1
0
            private static TomlObjectType GetTargetType(Type memberType, TomlSettings settings)
            {
                TomlObjectType GetTargetTypeFromArrayType()
                {
                    var et = memberType.GetElementType();

                    if (et != null)
                    {
                        return(GetTargetTypeFromElementType(et));
                    }

                    return(TomlObjectType.Array);
                }

                TomlObjectType GetTargetTypeFromEnumerableType()
                {
                    if (memberType.IsGenericType && typeof(IEnumerable).IsAssignableFrom(memberType))
                    {
                        var ga = memberType.GetGenericArguments();
                        if (ga.Length == 1)
                        {
                            return(GetTargetTypeFromElementType(ga[0]));
                        }
                    }

                    return(TomlObjectType.Array);
                }

                TomlObjectType GetTargetTypeFromElementType(Type eleType)
                {
                    var tt = GetTargetType(eleType, settings);

                    return(tt == TomlObjectType.Table
                        ? TomlObjectType.ArrayOfTables
                        : TomlObjectType.Array);
                }

                var converter = settings.TryGetToTomlConverter(memberType);

                if (converter != null)
                {
                    return(converter.TomlTargetType.Value);
                }

                if (memberType.IsArray)
                {
                    return(GetTargetTypeFromArrayType());
                }
                else if (typeof(IEnumerable).IsAssignableFrom(memberType))
                {
                    return(GetTargetTypeFromEnumerableType());
                }

                return(TomlObjectType.Table);
            }