void WriteTableMember(object key, object val, IEnumerable <Attribute> attributes)
        {
            if (val == null)
            {
                return;
            }

            LuaMemberAttribute luaMemberAttribute = null;

            if (attributes != null)
            {
                luaMemberAttribute = attributes.OfType <LuaMemberAttribute>().FirstOrDefault();
            }

            string keyName = null;

            if (luaMemberAttribute != null && !string.IsNullOrEmpty(luaMemberAttribute.Name))
            {
                keyName = QuoteAndEscapeString(luaMemberAttribute.Name);
            }
            else if (key is string)
            {
                keyName = QuoteAndEscapeString((string)key);
            }
            else
            {
                keyName = key.ToString();
            }

            _writer.Write($"[{keyName}]=");

            Serialize(val, attributes);
            _writer.Write(",");
        }
Exemple #2
0
        Dictionary <string, MemberInfo> GetMemberNameInfoDict(Type tableType)
        {
            LuaObjectAttribute luaObjectAttribute = tableType.GetCustomAttribute <LuaObjectAttribute>();
            bool isExplicit       = false;
            bool includeNonPublic = false;

            Dictionary <string, MemberInfo> memberNameInfoDict = new Dictionary <string, MemberInfo>();

            BindingFlags bindingFlags = BindingFlags.Public | BindingFlags.Instance;

            if (luaObjectAttribute != null)
            {
                includeNonPublic = luaObjectAttribute.IncludeNonPublic;
                if (includeNonPublic)
                {
                    bindingFlags = bindingFlags | BindingFlags.NonPublic;
                }

                isExplicit = luaObjectAttribute.IsExplicit;
            }

            PropertyInfo[] pInfos = tableType.GetProperties(bindingFlags);
            FieldInfo[]    fInfos = tableType.GetFields(bindingFlags);

            foreach (MemberInfo mi in pInfos.Union <MemberInfo>(fInfos))
            {
                CompilerGeneratedAttribute compilerGeneratedAttribute = mi.GetCustomAttribute <CompilerGeneratedAttribute>();
                if (compilerGeneratedAttribute != null)
                {
                    continue;
                }

                LuaMemberAttribute luaMemberAttribute = mi.GetCustomAttribute <LuaMemberAttribute>();
                if (luaMemberAttribute == null && isExplicit)
                {
                    continue;
                }

                string name = mi.Name;
                if (luaMemberAttribute != null && !string.IsNullOrEmpty(luaMemberAttribute.Name))
                {
                    name = luaMemberAttribute.Name;
                }

                if (mi is PropertyInfo)
                {
                    PropertyInfo pi = (PropertyInfo)mi;
                    if (pi.GetSetMethod(includeNonPublic) == null)
                    {
                        continue;
                    }
                }

                memberNameInfoDict.Add(name, mi);
            }

            return(memberNameInfoDict);
        }