I would like to read/convert a table form a Toml file into a dictionary<Tkey, Tvalue>. Here is an example for the Toml Table:

 [Parameters] param1 = [1,2,3,4,5] param2 = ["a","b","c","d"] 

I'm using Tomlyn as the TOML parser. I can add link if it's allowed.

The problem i have is to parse my table "Parameters" to a dictionary. What am i doing wrong?

Here is my attempt:

 using System; using System.Collections.Generic; using Tomlyn; using Tomlyn.Model; void main { static void Main(string[] args) { var toml = File.ReadAllText("parameters.toml"); TomlTable model = Toml.ToModel(toml); // This is what i can't figure out to do correctly Dictionary<string, object> databaseDictionary = model["Parameters"].ToDictionary(); // Print the contents of the dictionary foreach (KeyValuePair<string, object> pair in databaseDictionary) { Console.WriteLine($"{pair.Key}: {pair.Value}"); } } 

Thx Mike/

5

1 Answer

Your problem is that Tomltable doesn't have the Todictionary() method. You need to make a workaround.

You can use Dictionary<TomlKey, TomlObject> to initialize a dictionary first instead of model["Parameters"].ToDictionary();, then start iterating over your table and inserting its values into the dictionary. as follows:

class Program { static void Main(string[] args) { var toml = File.ReadAllText("parameters.toml"); TomlTable table = Toml.Parse(toml); TomlTable parameters = table.Get<TomlTable>("Parameters"); Dictionary<string, object> dictionary = new Dictionary<string, object>(); foreach (var kvp in parameters) { string key = kvp.Key.ToString(); object value = kvp.Value.ToObject(); dictionary.Add(key, value); } // Print the contents of the dictionary foreach (var pair in dictionary) { Console.WriteLine($"{pair.Key}: {pair.Value}"); } } } 
0

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.