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

时间:2017-08-06 20:16:13

标签: c# csvhelper

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

我的班级交易包含一个列表Wave。

     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);

            }

enter image description here

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

1 个答案:

答案 0 :(得分:1)

CSV文件是平的。如果必须手动创建文件,您将如何表示此类记录?你必须重复记录。这是没有意义的,所以图书馆通过忽略 tableView.estimatedRowHeight = 88.0 tableView.rowHeight = UITableViewAutomaticDimension tableView.heightAnchor.constraint(equalToConstant: tableView.contentSize.height).isActive = true 来做正确的事。

解决方法是让您的类中有另一个属性,为Waves对象中的属性返回逗号分隔值,例如WaveProp1)。

string

您需要使用class Trade { //.. public string WaveCSV { get { return string.Join(",", Waves.Select(w => w.Prop1).ToArray()); } } } 限定WaveCSV,以便该值中的逗号不会造成损害,或者完全使用其他分隔符。

修改

如果您需要多个媒体资源,则可以覆盖"课程中的ToString(),返回您想要的内容,然后使用Wave