使用csvHelper库时遇到一些问题。我已经附加了我的课堂对象。我希望将只引用string和dateTime类型的数据。
我知道我需要更新csv.Configuration.ShouldQuote选项。但不知道如何。
static void Main()
{
var recordNew = new List<Metadata>
{
new Metadata { Id = Guid.NewGuid(), VersionNumber = 100, CreatedOn=DateTime.Now, Name = "two", AccountSequene=90, IsPublic=false}
};
writeDataTest(recordNew);
}
private static void writeDataTest(List<Metadata> records)
{
using (var writer = new StringWriter())
using (var csv = new CsvWriter(writer))
{
csv.Configuration.HasHeaderRecord = false;
csv.Configuration.ShouldQuote = (field, context) =>
{
return context.Record.Count == 1;
};
csv.Configuration.RegisterClassMap<MetadataMap>();
csv.WriteRecords(records);
var s = writer.ToString();
}
}
public class Metadata
{
public Guid? Id { get; set; }
public long? VersionNumber { get; set; }
public DateTime? CreatedOn { get; set; }
public string Name { get; set; }
public string Email { get; set; }
public long? AccountSequene { get; set; }
public bool? IsPublic { get; set; }
}
public class MetadataMap : ClassMap<Metadata>
{
public MetadataMap()
{
Map(m => m.Id).Index(0);
Map(m => m.VersionNumber).Index(1);
Map(m => m.CreatedOn).Index(2).ConvertUsing(m => $"\"{m.CreatedOn}\"");
Map(m => m.Name).Index(3).ConvertUsing(m => $"\"{m.Name}\"");
Map(m => m.Email).Index(4).ConvertUsing(m => $"\"{m.Email}\"");
Map(m => m.AccountSequene).Index(5);
Map(m => m.IsPublic).Index(6);
}
}
当前我得到的结果是
74d5c276-0e5f-442b-a392-cd8fb37c4114,“ 100”,“ 4/12/2019 2:11:40 PM”,“两个”,“”,90,假
在我设置返回context时引用100。Record.Count== 1;但是我的预期结果是
74d5c276-0e5f-442b-a392-cd8fb37c4114,100,“ 4/12/2019 2:11:40 PM”,“两个” ,, 90,假
在预期结果中,因为未提供字符串Email,所以我希望它像(“ two” ,, 90而不是“ two”,“”,90)
答案 0 :(得分:2)
您的答案可能更容易阅读,但以防万一,您想使用ShouldQuote
。我发现Josh Close在哪里显示了how to quote specific indexes。删除ClassMap中的ConvertUsing()
语句,然后像这样设置ShouldQuote
。
var indexes = new[] { 2, 3, 4 };
csv.Configuration.ShouldQuote = (field, context) => indexes.Contains(context.Record.Count) && !string.IsNullOrEmpty(field);
答案 1 :(得分:0)
更新了代码,如下所示:
`private static void writeDataTest(List<Metadata> records)
{
......
csv.Configuration.ShouldQuote = (field, context) =>
{
return false;
};
......
}
public class MetadataMap : ClassMap<Metadata>
{ .....
Map(m => m.Email).Index(4).ConvertUsing(m => m.Email != null ? $"\"{m.Email}\"" : $"{m.Email}");
....}
`