我们正在将遗留代码移植到dotnet标准中,并且正面临一个在csvhelper2.5.0net451中不存在的问题。
问题似乎是CsvReader无法解决映射中底层属性的正确ReturnType,并试图将它们全部映射到系统对象
[TestMethod]
public void CanCreateMapsFromDynamicList()
{
var data = new List<string[]>
{
new[] { "Col1", "Col2" },
new[] { "1", "one" },
new[] { "2", "two" }
};
var queue = new Queue<string[]>(data);
var parserMock = new ParserMock(queue);
var csvReader = new CsvReader(parserMock);
csvReader.Configuration.RegisterClassMap<SomeTypeClassMap>();
var records = csvReader.GetRecords<SomeType>().ToList();
Assert.IsNotNull(records);
Assert.AreEqual(2, records.Count);
}
public class SomeTypeClassMap : ClassMap<SomeType>
{
public SomeTypeClassMap()
{
Map(x => x.Id).Ignore();
var t = new SomeType();
foreach (var mapping in t.Mappings)
{
Map(mapping);
}
}
}
public class SomeType
{
public int Id { get; set; }
public string Col1 { get; set; }
public string Col2 { get; set; }
public IEnumerable<Expression<Func<SomeType, dynamic>>> Mappings =>
new List<Expression<Func<SomeType, dynamic>>> {i => i.Col1, i => i.Col2};
}
报告的错误:
试验方法
CsvHelper.Tests.CsvReaderMappingTestsRuslan.CanCreateMapsFromDynamicist
引发异常:System.InvalidCastException:无法转换的对象
类型
键入
P、 我尝试过将“Mappings”属性更改为static并得到相同的结果。