枚举不是用CSVHelper序列化的?

时间:2018-01-29 02:37:42

标签: c# enums csvhelper

我刚开始使用CSVHelper,它看起来很有前途。但是,我无法弄清楚如何最好地使用明显没有开箱即用的枚举。

我有很多类,如下所示。它们都包含不同的枚举,理想情况下将使用名称进行序列化。

 [DataContract(IsReference = true)]
    public class Setting1 : LibraryComponent
    {
        [DataMember]
        public InfiltrationModel InfiltrationModel = InfiltrationModel.Constant;
        [DataMember]
        public double InfiltrationAch { get; set; } = 0.1;
    }
 [DataContract(IsReference = true)]
    public class Setting2 : LibraryComponent
    {
        [DataMember]
        public EconomizerItem EconomizerType { get; set; } = EconomizerItem.NoEconomizer;
        [DataMember]
        public double HeatRecoveryEfficiencyLatent { get; set; } = 0.65;
    }

然后我使用模板化函数来读写所有内容。我希望有一种方法可以保持这种通用性,这样我就不必为每个类编写自定义读写例程。

public void writeLibCSV<T>(string fp, List<T> records)
        {
            using (var sw = new StreamWriter(fp))
            {
                var csv = new CsvWriter(sw);
                csv.WriteRecords(records);
            }
        }
        public List<T> readLibCSV<T>(string fp)
        {
            var records = new List<T>();
            using (var sr = new StreamReader(fp))
            {
                var csv = new CsvReader(sr);
                records = csv.GetRecords<T>().ToList();
            }
            return records;
        }

然后我在我的代码中使用读写函数:

 writeLibCSV<Setting1>(@"C:\Temp\Setting1.csv", lib.Setting1.ToList());
 List<Setting1> in = readLibCSV<Setting1>(@"C:\Temp\Setting1.csv");

CSV文件如下所示。枚举字段似乎被忽略了。

InfiltrationAch
0.1

我尝试使用csv.WriteField手动读取写入字段(&#34; EconomizerType&#34;);但这非常麻烦。有没有人建议我如何使CSVHelper默认输出枚举?如果我没有误读http://joshclose.github.io/CsvHelper/2.x/上的更改日志,那么自1.13版以来,CSVHelper应该内置枚举转换器吗?

0 个答案:

没有答案