You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C#中解析带数字键的LuaTable?

NLua解析LuaTable数字键及转JSON解决方案

一、数字键访问失效的解决办法

  • 点语法仅支持合法标识符(不能以数字开头),所以mission.coalition.blue.country.1这种写法无法识别数字键1,必然返回null。
  • 改用索引器语法直接访问:mission.coalition.blue.country[1],这是NLua中访问数字键LuaTable元素的标准方式,和监视窗口中显示的键结构对应,能正确获取到对应值。

二、LuaTable转JSON的实现方案

不需要额外引用Lua库,直接在C#中通过NLua遍历处理即可,以下两种方法任选:

方法1:手动遍历构造JSON字符串

using NLua;
using System.Text;

public string LuaTableToJson(LuaTable table)
{
    var sb = new StringBuilder();
    sb.Append("{");
    bool isFirstItem = true;
    
    foreach (var kvPair in table)
    {
        if (!isFirstItem) sb.Append(",");
        isFirstItem = false;

        string key = kvPair.Key.ToString();
        object value = kvPair.Value;

        sb.Append($"\"{key}\":");
        if (value is LuaTable subTable)
            sb.Append(LuaTableToJson(subTable));
        else if (value is string strValue)
            sb.Append($"\"{strValue}\"");
        else if (value is int || value is float || value is double)
            sb.Append(value.ToString());
        else
            sb.Append($"\"{value.ToString()}\"");
    }
    
    sb.Append("}");
    return sb.ToString();
}

方法2:结合Json.NET序列化(更简洁)

先把LuaTable转成C#字典,再用Json.NET序列化:

using NLua;
using Newtonsoft.Json;

public object LuaTableToDict(LuaTable table)
{
    var dict = new Dictionary<object, object>();
    foreach (var kvPair in table)
    {
        object value = kvPair.Value;
        dict[kvPair.Key] = value is LuaTable subTable ? LuaTableToDict(subTable) : value;
    }
    return dict;
}

// 使用示例
var convertedDict = LuaTableToDict(mission.coalition.blue.country);
string jsonString = JsonConvert.SerializeObject(convertedDict, Formatting.Indented);

注:如果项目没有Newtonsoft.Json,直接通过NuGet安装即可,无需额外Lua库。


内容的提问来源于stack exchange,提问作者Francisco Benito

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 12:24:51