Charles
Charles

Reputation: 1

No properties are mapped for type using csv.WriteRecord

First,I create a class

public class CombatData
{
    public int blackCatHealth;
    public int blackCatAttack;
    public int blackCatWinCount;
    public int whiteCatWinCount;
    public int blackCatDraw;
    public CombatData(int bH,int bA,int bW,int wW,int bD)
    {
        blackCatHealth = bH;
        blackCatAttack = bA;
        blackCatWinCount = bW;
        whiteCatWinCount = wW;
        blackCatDraw = bD;
    }
}

Then I try to write

var record = new CombatData(blackCat.heath, blackCat.attack, blackCat.winCount, whiteCat.winCount, blackCat.draw);
    using (stream)
    using (writer)
    using (csv)
    {
        csv.WriteRecord(record);
        csv.NextRecord();
    }

But It gives me this

Unhandled exception. CsvHelper.WriterException: No properties are mapped for type 'CombatData'.
IWriter state:
   Row: 1
   Index: 0
   HeaderRecord:
1

The tutorial I read did not mention mapping when it was written So I don't know what to do, just try the following

public sealed class CombatDataMap : ClassMap<CombatData>
{
    public CombatDataMap()
    {
        Map(m => m.blackCatHealth).Index(0);
        Map(m => m.blackCatAttack).Index(1);
        Map(m => m.blackCatWinCount).Index(2);
        Map(m => m.whiteCatWinCount).Index(3);
        Map(m => m.blackCatDraw).Index(4);
    }
}
var record = new CombatData(blackCat.heath, blackCat.attack, blackCat.winCount, whiteCat.winCount, blackCat.draw);
    using (stream)
    using (writer)
    using (csv)
    {
        csv.Context.RegisterClassMap<CombatDataMap>();
        csv.WriteRecord(record);
        csv.NextRecord();
    }

But still there is a problem

Unhandled exception. CsvHelper.WriterException: An unexpected error occurred.
IWriter state:
   Row: 2
   Index: 0
   HeaderRecord:
2

 ---> System.ArgumentNullException: Value cannot be null. (Parameter 'destination')

I may be terribly wrong because I don't see anyone else having the same problem as me. I don't understand why a map is needed. Please help me.

Also my English is not good, this is the result of google translate, if there is a problem, I'm sorry

Upvotes: 0

Views: 626

Answers (1)

David Specht
David Specht

Reputation: 9074

You just need to set the configuration to use Fields instead of Properties.

void Main()
{
    var config = new CsvConfiguration(CultureInfo.InvariantCulture)
    {
        MemberTypes = CsvHelper.Configuration.MemberTypes.Fields
    };
    
    var record = new CombatData(1, 2, 3, 4, 5); 
    using (var csv = new CsvWriter(Console.Out, config))
    {
        csv.WriteRecord(record);
        csv.NextRecord();
    }
}

public class CombatData
{
    public int blackCatHealth;
    public int blackCatAttack;
    public int blackCatWinCount;
    public int whiteCatWinCount;
    public int blackCatDraw;
    public CombatData(int bH, int bA, int bW, int wW, int bD)
    {
        blackCatHealth = bH;
        blackCatAttack = bA;
        blackCatWinCount = bW;
        whiteCatWinCount = wW;
        blackCatDraw = bD;
    }
}

Upvotes: 0

Related Questions