Я думаю, что если вы хотите сериализовать анонимные типы в таблицы lua, вам понадобится рефлексия пользователя. Может быть, вы можете попробовать написать сериализатор таблицы lua. Я думаю, что я попытался бы собрать свои таблицы как строку и передать ее Lua с DoString
Я думаю, что словарное решение - это хорошо, и вы можете использовать вложенные таблицы без отражения. Я попробовал Tuples, но они не достаточно универсальны, и в конце концов я вернулся к идее отражения.
Я бы создал метод расширения:
public static class LuaExt
{
public static LuaTable GetTable(this Lua lua, string tableName)
{
return lua[tableName] as LuaTable;
}
public static LuaTable CreateTable(this Lua lua, string tableName)
{
lua.NewTable(tableName);
return lua.GetTable(tableName);
}
public static LuaTable CreateTable(this Lua lua)
{
lua.NewTable("my");
return lua.GetTable("my");
}
}
Тогда я мог бы написать что-то вроде этого:
var lua = new Lua();
var table = lua.CreateTable("test");
table["A"] = 1;
table["B"] = 1;
table["C"] = lua.CreateTable();
((LuaTable) table["C"])["A"] = 3;
table["D"] = lua.CreateTable();
((LuaTable)table["D"])["A"] = 3;
foreach (var v in table.Keys)
{
Console.WriteLine(v + ":" + table[v]);
}