Search code examples
csvhelper

getting no properties are mapped for type using csvHelper


I have the following class

public class EventObject
{
    public int OrderID { get; private set; }
    public int DemandID { get; private set; }
    public string ExternalEventID { get; private set; }
    public int Part { get; private set; }
    public int BasedOnObjectID { get; private set; }
    public int BasedOnStateID { get; private set; }
    public DateTime StartDate { get; private set; }
    public DateTime EndDate { get; private set; }
    public int? EventID { get; private set; }

    public static IEnumerable<EventObject> LoadFromCSV(TextReader reader)
    {
        var plannedEventsToReturn = new List<EventObject>();
        var csv = new CsvReader(reader);
        csv.Configuration.RegisterClassMap<EventObjectMap >();
        return csv.GetRecords<EventObject>().ToList();
    }
}

and I have created a mapping class as documentd in csvHElper

public sealed class EventObjectMap : CsvClassMap<EventObject>
{
    public EventObjectMap ()
    {
        Map(m => m.OrderID).Index(0);
        Map(m => m.DemandID).Index(1);
        Map(m => m.ExternalEventID).Index(2);
        Map(m => m.Part).Index(3);
        Map(m => m.BasedOnObjectID).Index(4);
        Map(m => m.BasedOnStateID).Index(5);
        Map(m => m.StartDate).Index(6).TypeConverter<OptimizationDateTimeConverter>();
        Map(m => m.EndDate).Index(7).TypeConverter<OptimizationDateTimeConverter>();
        Map(m => m.EventID).Index(8).TypeConverter<NullableIntConverter>();
    }
}

when I hit the line

return csv.GetRecords<EventObject>().ToList();

i get an exception

no properties are mapped for type


Solution

  • Found the problem .. the properties had a private set .. they need to be public like this..

    public int OrderID { get; set; }
    public int DemandID { get; set; }
    public string ExternalEventID { get; set; }
    public int Part { get;  set; }
    public int BasedOnObjectID { get; set; }
    public int BasedOnStateID { get; set; }
    public DateTime StartDate { get; set; }
    public DateTime EndDate { get; set; }
    public int? EventID { get; set; }