我有一些有很多领域的课程;
public class CrowdedHouse
{
public int value1;
public float value2;
public Guid value3;
public string Value4;
// some more fields below
}
我的课程必须按以下格式(de)序列化为简单的Windows文本文件
NAME1=VALUE1
NAME2=VALUE2
在.NET中最方便的方法是什么?这是一个文本文件,所有值必须先将其转换为字符串。我们假设我已经将所有数据转换为字符串。
UPDATE一个选项是pinvoke WritePrivateProfileString / WritePrivateProfileString 但是这些都使用了我不需要使用的“[Section]”字段。
答案 0 :(得分:11)
编辑:如果您已将每个数据值转换为字符串,只需使用以下方法在生成Dictionary
这些值后对其进行序列化:
var dict = new Dictionary<string, string>
{
{ "value1", "value1value" },
{ "value2", "value2value" },
// etc
}
或使用dict.Add(string key, string value)
。
要阅读数据,只需将=
周围的每一行拆分,然后将结果存储为Dictionary<string, string>
:
string[] lines = File.ReadAllLines("file.ext");
var dict = lines.Select(l => l.Split('=')).ToDictionary(a => a[0], a => a[1]);
要将字典转换为文件,请使用:
string[] lines = dict.Select(kvp => kvp.Key + "=" + kvp.Value).ToArray();
File.WriteAllLines(lines);
请注意,您的NAME
和VALUE
不能包含=
。
答案 1 :(得分:4)
写作很简单:
// untested
using (var file = System.IO.File.CreateText("data.txt"))
{
foreach(var item in data)
file.WriteLine("{0}={1}", item.Key, item.Value);
}
阅读它:
// untested
using (var file = System.IO.File.OpenText("data.txt"))
{
string line;
while ((file.ReadLine()) != null)
{
string[] parts = line.Split('=');
string key = parts[0];
string value = parts[1];
// use it
}
}
但最好的答案可能是:使用XML。
答案 2 :(得分:4)
Comic上尉回答的小改进:
要启用= in值:(仅拆分一次)
var dict = lines.Select(l => l.Split(new[]{'='},2)).ToDictionary(a => a[0], a => a[1]);