c#保存文本文件到对象的最佳方法
本文关键字:最佳 方法 对象 保存 文本 文件 | 更新日期: 2023-09-27 18:03:02
我有一组分隔的文本文件,我需要读取,创建类和对象,并在其中存储成员。我是一个初学者,只是希望被指向正确的方向。任何帮助都将非常感激。非常感谢。
我创建了一个带有对象的类:
public string left;
public string right;
和我的表单代码:
private void button1_Click(object sender, EventArgs e)
{
OpenFileDialog of = new OpenFileDialog();
of.ShowDialog();
textBox1.Text = of.FileName;
}
private void button2_Click(object sender, EventArgs e)
{
StreamReader sr = new StreamReader(textBox1.Text);
textBox2.Text = sr.ReadToEnd();
// sr.Close();
}
private void button3_Click(object sender, EventArgs e)
{
string[] split1 = textBox2.Text.Split(';');
foreach (string segment in split1)
{
//split sub-segment
string[] split2 = segment.Split(':');
//check if it's valid
if (split2.Count().Equals(2))
{
id textfile = new id();
textfile.left += // ????
id textfile1 = new id();
textfile.right += // ????
一般来说,使用JSON或XML将数据保存到文本文件而不是分隔文本或自定义格式要好得多。这是因为在我的语言中有很好的JSON和XML支持,而且很容易使用。
public class MyCustomClass //this class will hold your data
{
public string Left {get; set;}
public string Right {get;set;}
}
MyCustomClass mcc=new MyCustomClass(); //create an instance of your class
mcc.Left="yes"; //set some properties
mcc.Right="nope";
string json=JsonConvert.SerializeObject(mcc); //convert to JSON string
File.WriteAllText("mcc.txt",json); //save to file
//later on, when you want to read it back from the file
string json=File.ReadAllText("mcc.text"); //read from file into a string
MyCustomClass mcc=JsonConvert.DeserializeObject<MyCustomClass>(json); //convert the string back to an instance of MyCustomClass
上面,我们使用Json。它是一个可用于。NET框架的库(在NuGet上可用)。我们使用它将对象转换为字符串(序列化),然后再将其转换回对象(反序列化)。注意,为了使用JsonConvert类,您需要Json。. NET引用并在类using Newtonsoft.Json;
的顶部添加using语句。
您正在寻找的是序列化。当你有一个已知的结构(像你的类string left
和string right
),你想把这个结构写出来到一个文本文件。然后,您希望将这些信息读入并自动使用每个值填充类。
正如mason指出的,JSON相当容易设置。您创建您想要的类结构,并告诉JSON将其保存到指定的文件(通过SerializeObject
)。
由于。net允许反射,JSON能够将文本文件转换回class
的内容,而无需手动'myClass '。Left = [some_value_from_json]'.
就我个人而言,我会使用JSON或XML,因为命名您的数据块意味着它更具可读性,并且您的解析器能够处理某人重新排列数据(如果文件在定义right
之前定义left
并不重要)。如果您重新排列。csv文件,那么您会得到数据损坏。
读取带分隔符的文件是很常见的,并且有许多方法可以解决这个问题。我个人使用streamReader读取文件,并在分隔符
上分割文件。 Foo foo = new Foo(); // custom class
string file = "export.CSV";
if (System.IO.File.Exists(file))
{
// Do work
using (var reader = new StreamReader(file))
{
while (!reader.EndOfStream)
{
// split on the delimeter
var readLine = reader.ReadLine();
if (readLine == null) continue;
var lines = readLine.Split(new[] { ',' });
foreach (string s in lines)
{
// do something with the data from the line
}
// alternatively, you could specify your objects if your files
// layout never changes. Just be careful to catch the exceptions!
foo.bar = lines[0];
foo.baz = lines[1];
}
}
}