C# 将.csv数据导入类

C# 将.csv数据导入类,c#,C#,我有一些代码可以将类中的数据保存到.csv文件中,但我不知道如何将其读回类中,以便将其放在listview中。以下是保存的代码: SaveFileDialog save = new SaveFileDialog(); save.Filter = "Excel|*.csv"; if (save.ShowDialog() == DialogResult.OK) { StreamWriter sw = new S

我有一些代码可以将类中的数据保存到.csv文件中,但我不知道如何将其读回类中,以便将其放在listview中。以下是保存的代码:

        SaveFileDialog save = new SaveFileDialog();
        save.Filter = "Excel|*.csv";

        if (save.ShowDialog() == DialogResult.OK)
        {
            StreamWriter sw = new StreamWriter(save.FileName);
            try
            {
                sw.WriteLine("Name" + ";" + "Authors" + ";" + "Pages" + ";" + "Date" + ";" + "Price" + ";" + "Copies");
                foreach (Book b in bookList)
                {
                    string aux = "";
                    aux = string.Join(";", b.Authors);//I know I will probably need to change ';' here because it will have trouble reading it
                    sw.WriteLine(b.Name + ";" + aux + ";" + b.Pages + ";" + b.Date.ToString("dd.MM.yyyy") + ";" + b.Price + ";" + b.Copies);
                }
            }
            catch (IOException ert)
            {
                MessageBox.Show(ert.Message);
            }
            catch (Exception ew)
            {
                MessageBox.Show(ew.Message);
            }
            finally
            {
                sw.Close();
            }
        }

如果您只想永久保存数据,可以按如下方式序列化和反序列化对象:

var BooksFromCsv = from row in File.ReadLines(@"C:\books.csv").Where(arg => !string.IsNullOrWhiteSpace(arg) && arg.Length > 0).AsEnumerable()
                   let column = row.Split(';')
                   select new Book
                   {
                      Name = column[0],
                      Pages = column[1],
                      AuthorName = column[2],
                   };
//拯救

using (var fs = new FileStream(path, FileMode.Create))
{
      var xSer = new XmlSerializer(typeof(objecttype));
      xSer.Serialize(fs, myObject);
}
//装载

using (var fs = new FileStream(path, FileMode.Open))
{
     var xSer = new XmlSerializer(typeof(objecttype));
     myObject = (objecttype)xSer.Deserialize(fs);
}

这其实很简单。假设您有以下类
书籍

public class Book
{
    public string Name { get; set; }
    public int Pages { get; set; }
    public string AuthorName { get; set; }
}
然后你可以这样简单地阅读:

var BooksFromCsv = from row in File.ReadLines(@"C:\books.csv").Where(arg => !string.IsNullOrWhiteSpace(arg) && arg.Length > 0).AsEnumerable()
                   let column = row.Split(';')
                   select new Book
                   {
                      Name = column[0],
                      Pages = column[1],
                      AuthorName = column[2],
                   };

结果将是一个
IEnumerable
。如果需要列表或数组,只需附加一个
.ToList()
.ToArray()

您忘记了
c#-1.2
标记。该死的5个标记限制。有免费的库可以在两个方向执行此操作。请尝试FileHelpers。对那种东西很有用。为什么使用csv而不是xml?否则,您可以轻松地序列化和反序列化…linq2csv可能会很有用。简单的拆分可能会导致很多问题。如果您知道您的文本不包含分隔符,那么这样就可以了。但当第一次有人在带引号的字符串中放分号时,这就变成了一场噩梦。如果文件头也包含在文件中,这会起作用吗?应该是可能的。唯一要添加的是跳过第一行的跳过调用。