private void AddTypeInner(Type t)
        {
            if (t.GetInterface("IList") != null)
            {
                t = ReflectionX.ElementType(t);
            }

            if (TypeProperties.ContainsKey(t.AssemblyQualifiedName))
            {
                return;
            }

            var typeDict = new Dictionary <string, string>();

            TypeProperties.Add(t.AssemblyQualifiedName, typeDict);
            foreach (var prop in t.GetPersistedProperties())
            {
                if (typeDict.ContainsKey(prop.Name))
                {
                    log.Error("Property " + prop.Name + " repeated on type " + t.FullName);
                    continue;
                }
                typeDict.Add(prop.Name, prop.PropertyType.AssemblyQualifiedName);
                if (!prop.PropertyType.FullName.StartsWith("System."))
                {
                    AddTypeInner(prop.PropertyType);
                }
            }
        }