C# NET中最简单的键/值对文件解析
我的项目需要一个文件,我将在其中存储用户应该能够读取和修改的密钥/值对数据。我希望程序只希望密钥在那里,我希望尽快从文件中解析它们 我可以将它们存储在XML中,但XML非常复杂,需要遍历节点和子节点等等,我只需要一些类来获取文件并生成键值对。我希望尽可能少的错误处理,我希望用尽可能少的代码来完成 我自己也可以编写这样的类,但我更愿意学习它在框架中的作用,而不是两次发明轮子。在.NET(3.5)中是否有一些内置的魔法类能够做到这一点C# NET中最简单的键/值对文件解析,c#,.net,key-value,C#,.net,Key Value,我的项目需要一个文件,我将在其中存储用户应该能够读取和修改的密钥/值对数据。我希望程序只希望密钥在那里,我希望尽快从文件中解析它们 我可以将它们存储在XML中,但XML非常复杂,需要遍历节点和子节点等等,我只需要一些类来获取文件并生成键值对。我希望尽可能少的错误处理,我希望用尽可能少的代码来完成 我自己也可以编写这样的类,但我更愿意学习它在框架中的作用,而不是两次发明轮子。在.NET(3.5)中是否有一些内置的魔法类能够做到这一点 MagicClass kv = new MagicClass("
MagicClass kv = new MagicClass("Settings.ini"); // It doesn't neccesarily have to be an INI file, it can be any simple key/value pair format.
string Value1 = kv.get("Key1");
...
我不知道有什么内置类可以解析ini文件。我在需要的时候用过。它是根据MIT/X11许可证授权的,因此在封闭源代码程序中不存在任何问题 使用起来很方便。因此,如果您的Settings.ini文件的格式如下:
[Configuration]
Name = Jb Evain
Phone = +330101010101
key1=value1
key2=value2
使用它将非常简单:
var source = new IniConfigSource ("Settings.ini");
var config = source.Configs ["Configuration"];
string name = config.Get ("Name");
string phone = config.Get ("Phone");
按以下方式格式化文件:
[Configuration]
Name = Jb Evain
Phone = +330101010101
key1=value1
key2=value2
将整个文件读入一个字符串(可能在file或string类中有一个简单的便利函数),然后调用string.Split('=')。确保在遍历列表时对每个键和值调用string.Trim(),并将每对键和值弹出到哈希表或字典中。为键和值使用该类,然后只需将一个带
这是我觉得最简单的方法。您不必担心遍历节点。调用反序列化函数将为您做到这一点。如果用户愿意,也可以编辑文件中的值。如果您希望用户能够读取和修改文件,我建议使用逗号分隔的对,每行一个
key1,value1
key2,value2
...
解析很简单:读取文件,在换行符或逗号处拆分,然后成对地获取元素如果您正在寻找一个快速简单的函数,并且不想使用.Net app\user config设置文件或担心有时会出现的序列化问题 以下静态函数可以加载格式为
KEY=VALUE
的文件
public static Dictionary<string, string> LoadConfig(string settingfile)
{
var dic = new Dictionary<string, string>();
if (File.Exists(settingfile))
{
var settingdata = File.ReadAllLines(settingfile);
for (var i = 0; i < settingdata.Length; i++)
{
var setting = settingdata[i];
var sidx = setting.IndexOf("=");
if (sidx >= 0)
{
var skey = setting.Substring(0, sidx);
var svalue = setting.Substring(sidx+1);
if (!dic.ContainsKey(skey))
{
dic.Add(skey, svalue);
}
}
}
}
return dic;
}
还不如将其格式等效于Java属性文件,并使用equals而不是逗号。@JeeBee:但这将假定用户熟悉Java属性文件格式;Nicholas Mancuso指出,csv格式可以用Excel或notepadAs进行编辑,XML序列化不需要遍历节点等。必须考虑到
KeyValuePair
是不可序列化的。在接下来的问题中讨论了解决方案的更详细描述:您能提供一个实际的例子吗?