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 += // ????

c#保存文本文件到对象的最佳方法

一般来说,使用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 leftstring 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];
          }
      }
 }