如何在C#中将TOML的[Table]转换为Dictionary?
解决Tomlyn解析TOML表格转Dictionary的问题
错误原因
你代码里的model["Parameters"]返回的是TomlTable类型(Tomlyn库中用于表示TOML表格的对象),该类型并没有内置的ToDictionary()方法,直接调用会导致编译错误。
解决方案
下面提供两种可行的转换方式:
方法1:手动遍历构建字典
using System; using System.Collections.Generic; using System.IO; using Tomlyn; using Tomlyn.Model; class Program { static void Main(string[] args) { var toml = File.ReadAllText("parameters.toml"); TomlTable model = Toml.ToModel(toml); // 将TomlTable转换为Dictionary<string, object> var parametersTable = model["Parameters"] as TomlTable; Dictionary<string, object> databaseDictionary = new Dictionary<string, object>(); if (parametersTable != null) { foreach (var kvp in parametersTable) { databaseDictionary.Add(kvp.Key, kvp.Value); } } // 打印字典内容 foreach (KeyValuePair<string, object> pair in databaseDictionary) { Console.WriteLine($"{pair.Key}: {pair.Value}"); } } }
方法2:使用LINQ快速转换(需引用System.Linq)
using System; using System.Collections.Generic; using System.IO; using System.Linq; using Tomlyn; using Tomlyn.Model; class Program { static void Main(string[] args) { var toml = File.ReadAllText("parameters.toml"); TomlTable model = Toml.ToModel(toml); // 利用LINQ将TomlTable转成Dictionary var parametersTable = model["Parameters"] as TomlTable; Dictionary<string, object> databaseDictionary = parametersTable? .ToDictionary(kvp => kvp.Key, kvp => kvp.Value) ?? new Dictionary<string, object>(); // 打印字典内容 foreach (KeyValuePair<string, object> pair in databaseDictionary) { Console.WriteLine($"{pair.Key}: {pair.Value}"); } } }
补充说明
- 两种方法都需要先将
model["Parameters"]强制转换为TomlTable,因为model的索引器返回的是object类型。 - 添加null检查可以避免当TOML文件中不存在"Parameters"表格时出现空引用异常。
内容的提问来源于stack exchange,提问作者Mike
相关产品推荐
相关产品推荐

