使用 .Constant() 与 CsvHelper 的错误映射
Error mapping with CsvHelper using .Constant()
我正在尝试使用 CsvHelper 将 csv 文件映射到 POCO class。当我尝试 csv.GetRecords<Client>()
时,我收到一条错误消息:
Field with name 'InID' does not exist. You can ignore missing fields by setting MissingFieldFound to null.
但是,我实际上是在使用常量映射 class 的 InID
属性:
Map(c => c.InID).Constant(true);
根据我在文档中看到的内容,使用 Constant
应该不需要 CSV 文件中的字段。
这是我的代码:
public class Client{
public int Id {get; set;}
public int FirstName {get; set;}
public int LastName {get; set;}
public bool InID {get; set;}
public bool InMH {get; set;}
}
public class IDMap : ClassMap<Client>
{
public IDMap(){
Map(c => c.InID).Constant(true);
Map(c => c.FirstName).Name("Consumer_First_Name");
Map(c => c.LastName).Name("Consumer_Last_Name");
}
}
//In my Controller
List<Client> clients;
using(var csv = new CsvReader(reader))
{
csv.Configuration.RegisterClassMap<IDMap>();
clients = csv.GetRecords<Client>().ToList();
}
我没有发现我正在做的事情和 CsvHelper example 有什么不同。
备注
我确实尝试添加 csv.Configuration.MissingFieldFound = null
,但所做的只是导致 CsvHelper 完全跳过 InID
映射,而不是用常量值填充 属性。
作为解决方法,您可以通过指定索引 -1 来指定这实际上不是源文件中的列。
Map(c => c.InID).Index(-1).Constant(true);
好像是bug。该示例也不起作用。您可以改用 ConvertUsing
。
public class IDMap : ClassMap<Client>
{
public IDMap()
{
Map(c => c.InID).ConvertUsing((IReaderRow row) => true);
Map(c => c.FirstName).Name("Consumer_First_Name");
Map(c => c.LastName).Name("Consumer_Last_Name");
}
}
我正在尝试使用 CsvHelper 将 csv 文件映射到 POCO class。当我尝试 csv.GetRecords<Client>()
时,我收到一条错误消息:
Field with name 'InID' does not exist. You can ignore missing fields by setting MissingFieldFound to null.
但是,我实际上是在使用常量映射 class 的 InID
属性:
Map(c => c.InID).Constant(true);
根据我在文档中看到的内容,使用 Constant
应该不需要 CSV 文件中的字段。
这是我的代码:
public class Client{
public int Id {get; set;}
public int FirstName {get; set;}
public int LastName {get; set;}
public bool InID {get; set;}
public bool InMH {get; set;}
}
public class IDMap : ClassMap<Client>
{
public IDMap(){
Map(c => c.InID).Constant(true);
Map(c => c.FirstName).Name("Consumer_First_Name");
Map(c => c.LastName).Name("Consumer_Last_Name");
}
}
//In my Controller
List<Client> clients;
using(var csv = new CsvReader(reader))
{
csv.Configuration.RegisterClassMap<IDMap>();
clients = csv.GetRecords<Client>().ToList();
}
我没有发现我正在做的事情和 CsvHelper example 有什么不同。
备注
我确实尝试添加 csv.Configuration.MissingFieldFound = null
,但所做的只是导致 CsvHelper 完全跳过 InID
映射,而不是用常量值填充 属性。
作为解决方法,您可以通过指定索引 -1 来指定这实际上不是源文件中的列。
Map(c => c.InID).Index(-1).Constant(true);
好像是bug。该示例也不起作用。您可以改用 ConvertUsing
。
public class IDMap : ClassMap<Client>
{
public IDMap()
{
Map(c => c.InID).ConvertUsing((IReaderRow row) => true);
Map(c => c.FirstName).Name("Consumer_First_Name");
Map(c => c.LastName).Name("Consumer_Last_Name");
}
}