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(","); }
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); }