Migrating from version 19 to 20
ConvertUsing
ConvertUsing
was renamed to Convert
.
// v19
Map(m => m.Property).ConvertUsing(row => row.GetField<int>(0) + row.GetField<int>(1));
// v20
Map(m => m.Property).Convert(row => row.GetField<int>(0) + row.GetField<int>(1));
CsvConfiguration
All properties changed from get; set;
to get; init;
.
// v19
var config = new CsvConfiguration(CultureInfo.InvariantCulture);
config.Delimiter = ";";
// v20
var config = new CsvConfiguration(CultureInfo.InvariantCulture)
{
Delimiter = ";",
}
CsvConfiguration
changed from a class
to a record
.
// v19
class MyConfig : CsvConfiguration {}
// v20
record MyConfig : CsvConfiguration {}
ShouldQuote
ShouldQuote
now takes in IWriterRow
instead of CsvContext
.
// v19
var config = new CsvConfiguration(CultureInfo.InvariantCulture)
{
ShouldQuote = (field, row) => true,
};
// v20
var config = new CsvConfiguration(CultureInfo.InvariantCulture)
{
ShouldQuote = (field, context) => true,
};
NewLine
Changed from enum NewLines
to char?
.
// v19
var config = new CsvConfiguration(CultureInfo.InvariantCulture)
{
NewLine = NewLines.LF,
};
// v20
var config = new CsvConfiguration(CultureInfo.InvariantCulture)
{
NewLine = '\n',
};
NewLineString
This was removed. Any code referencing this should be deleted.
RegisterClassMap
This moved to CsvContext
.
// v19
csv.Configuration.RegisterClassMap<MyMap>();
// v20
csv.Context.RegisterClassMap<MyMap>();
UnregisterClassMap
This moved to CsvContext
.
// v19
csv.Configuration.UnregisterClassMap<MyMap>();
// v20
csv.Context.UnregisterClassMap<MyMap>();
AutoMap
This moved to CsvContext
.
// v19
csv.Configuration.AutoMap<MyType>();
// v20
csv.Context.AutoMap<MyType>();
IParserConfiguration
All setters removed.
// v19
var config = new CsvConfiguration(CultureInfo.InvariantCulture);
config.Delimiter = ";";
// v20
var config = new CsvConfiguration(CultureInfo.InvariantCulture)
{
Delimiter = ";",
};
- Added
bool CacheFields
. - Added
bool LeaveOpen
. - Added
char? NewLine
. - Added
ParserMode Mode
. - Added
char[] WhiteSpaceChars
. - Removed
bool IgnoreQuotes
.
Any classes that implement IParserConfiguration
will need these changes.
IReaderConfiguration
All setters removed.
// v19
var config = new CsvConfiguration(CultureInfo.InvariantCulture);
config.Delimiter = ";";
// v20
var config = new CsvConfiguration(CultureInfo.InvariantCulture)
{
Delimiter = ";",
};
- Removed
TypeConverterOptionsCache
. - Removed
TypeConverterCache
. - Removed
Maps
. - Removed
RegisterClassMap
. - Removed
UnregisterClassMap
. - Removed
AutoMap
.
Any classes that implement IReaderConfiguration
will need these changes.
ISerializerConfiguration
This interface was removed and it's properties were added to IWriteConfiguration
.
// v19
class MyConfig : ISerializerConfiguration {}
// v20
class MyConfig : IWriterConfiguration {}
IWriterConfiguration
All setters removed.
// v19
var config = new CsvConfiguration(CultureInfo.InvariantCulture);
config.Delimiter = ";";
// v20
var config = new CsvConfiguration(CultureInfo.InvariantCulture)
{
Delimiter = ";",
};
- Removed
QuoteString
. - Removed
TypeConverterCache
. - Removed
MemberTypes
. - Removed
Maps
. - Removed
RegisterClassMap
. - Removed
UnregisterClassMap
. - Removed
AutoMap
.
Any classes that implement IWriterConfiguration
will need these changes.
MemberMap
ConvertUsing
renamed to Convert
.
// v19
Map(m => m.Property).ConvertUsing(row => row.Get(0));
Map(m => m.Property).ConvertUsing(value => value?.ToString() ?? string.Empty);
// v20
Map(m => m.Property).Convert(row => row.Get(0));
Map(m => m.Property).Convert(value => value?.ToString() ?? string.Empty);
CsvParser
string[] Read()
changed to bool Read()
.
// v19
string[] record;
while ((record = parser.Read()) != null)
{
}
// v20
while (parser.Read())
{
// Only get fields you need.
var field1 = parser[0];
var field2 = parser[1];
// Get all fields.
var record = parser.Record;
}
Constructor paramter IFieldReader fieldReader
removed from all constructors.
// v19
var parser = new CsvParser(fieldReader);
// v20
var parser = new CsvParser();
CsvSerializer
Removed. Functionality moved into CsvWriter
.
IFieldReader
Removed. Functionality moved into CsvParser
.
IParser
- Added
long ByteCount
. - Added
long CharCount
. - Added
int Count
. - Added
string this[int index]
. - Added
string[] Record
. - Added
string RawRecord
. - Added
int Row
. - Added
int RawRow
. - Changed
string[] Read
tobool Read
. - Changed
Task<string[]> ReadAsync
toTask<bool> ReadAsync
.
Any classes that implement IParser
will need these changes.
IReader
- Removed
ICsvParser Parser
.
Any classes that implement IReader
will need these changes.
IReaderRow
- Added
int ColumnCount
. - Added
int CurrentIndex
. - Added
string[] HeaderRecord
. - Added
IParser Parser
.
Any classes that implement IReaderRow
will need these changes.
ISerializer
Removed. Functionality moved into IWriter
.
IWriterRow
- Added
string[] HeaderRecord
. - Added
int Row
. - Added
int Index
.
RecordBuilder
Removed. Functionality moved into CsvWriter
.
Caches
enum Caches
was removed. Modifying internal caches is not supported anymore.
Any code referencing this should be removed.
ReadingContext/WritingContext
ReadingContext
and WritingContext
was merged into a single CsvContext
.
Anywhere either of these was used should change to CsvContext
.
Func/Action
Any place a Func
or Action
was used now has a dedicated delegate
.
This should only affect classes that are inheriting ClassMap
or CsvConfiguration
.
CsvFieldReader
Class removed. Code was wrapped into CsvParser
.