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[] Readtobool Read. - Changed
Task<string[]> ReadAsynctoTask<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.