Мы переносим унаследованный код в соответствии со стандартом tnet и столкнулись с проблемой, которой [я считаю] не было в CsvHelper 2.5.0 net451.
Похоже, что CsvReader может ' Не удается разрешить правильный ReturnType базовых свойств в сопоставлениях и пытается сопоставить их все с System.Object
Мне удалось воспроизвести его с помощью модульного теста в вашем решении:
[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};
}
* * +1007 сообщает об ошибке:
метод испытания CsvHelper.Tests.CsvReaderMappingTestsRuslan.CanCreateMapsFromDynamicList выбросил исключение: System.InvalidCastException: Не удалось привести объект типа «CsvHelper.Configuration.MemberMap2 [CsvHelper.Tests.CsvReaderMappingTestsRuslan + SomeType, System.String] для ввода типа CsvHelper.Configuration.MemberMap2 [CsvHelper.Tests.CsvReaderMappingTestsRuslan + SomeType, System.Object] '.
PS Я попытался изменить свойство «Сопоставления» до c и получить тот же результат.