CSV 编写器无法写入对象列表

CSV writer cannot write List of objects

我使用 CSV 编写器,它在大多数情况下工作得很好。当我尝试写入具有列表的对象时,它会忽略仅写入列表。 对于 eg.below,它写入 Trade 对象的所有属性,但 Wave 除外,Wave 是 Wave 对象的列表

我的 class 交易有以下内容,包括波浪列表。

     class Trade
    {
        public string  symbol { get; set; }
        public bool isOpen { get; set; }
        public DateTime OpenTime { get; set; }
        public DateTime CloseTime { get; set; }
        public double mfe { get; set; }
        public double mae { get; set; }
        public double entryPrice { get; set; }
        public double exitprice { get; set; }
        public TradeP TradeSignal { get; set; }
        public string  comments { get; set; }
        public int  Days2Stop { get; set; }
        public double TimeBreakout { get; set; }
        public double r { get; set; }
        public int  daysreach1r { get; set; }
        public int daysreach9x50 { get; set; }
        public double maetill1r { get; set; }
        public bool Day1ClosedDown { get; set; }
        public List<Wave> Waves { get; set; }

    }
     // write all the trade objects
            using (System.IO.StreamWriter file =
new System.IO.StreamWriter(@"C:\temp\" + DateTime.Now.ToString("yyyyMMdd") + "traderesults.txt", true))
            {
                var csv = new CsvWriter(file);
                csv.WriteRecords(Trades);

            }

在上面的屏幕截图中,您可以看到 csv 写入器打印了所有对象属性。它很长,但最后它没有打印 Wave 对象的属性

CSV 文件是平面文件。如果您必须手动创建文件,您将如何表示此类记录。你将不得不重复记录。这没有意义,所以图书馆通过忽略 Waves.

来做正确的事

解决方法是在您的 class 中添加另一个 属性,return 是 Wave 对象中 属性 的逗号分隔值,说 Prop1 (string).

class Trade {
  //..
  public string WaveCSV {
    get {
      return string.Join(",", Waves.Select(w => w.Prop1).ToArray()); 
    }
  }
}

您需要用 " 限定 WaveCSV 以便值中的逗号不会造成伤害,或者完全使用不同的分隔符。

编辑:

如果你需要多个属性,那么你可以覆盖Wave中的ToString() class,return任何你想要的,然后使用w.ToString() 代替。