|
|
|
|
|
在上一文中,我介紹了C# CSV解析器TinyCsvParser使用示例:解析自定義格式,在本文中,我將繼續(xù)介紹C# CSV解析器TinyCsvParser使用示例:解析枚舉。
你還可以參閱以下文章,看看TinyCsvParser其他使用示例。
解析枚舉
有時需要將 CSV 數(shù)據(jù)解析為枚舉,這可以通過EnumConverter
。
例子
想象一下,我們有一個包含車輛的 CSV 文件,該文件具有 Name
和 VehicleType
。VehicleType
只能是一個 Car
或 一個 Bike
。
VehicleType;Name
Car;Suzuki Swift
Bike;A Bike
在我們的 C# 代碼中將 VehicleType
表示為枚舉很有用,所以首先在代碼中定義enum
:
private enum VehicleTypeEnum
{
Car,
Bike
}
然后定義結果應映射到的類:
private class Vehicle
{
public VehicleTypeEnum VehicleType { get; set; }
public string Name { get; set; }
}
現(xiàn)在必須定義 CSV 文件和域模型之間的映射。為了解析VehicleType
必須使用自定義轉換器,它只是一個EnumConverter<VehicleTypeEnum
,構造函數(shù)參數(shù)發(fā)出信號以忽略解析枚舉的大小寫(大寫/小寫)。
private class CsvVehicleMapping : CsvMapping<Vehicle>
{
public CsvVehicleMapping()
{
MapProperty(0, x => x.VehicleType, new EnumConverter<VehicleTypeEnum>(true));
MapProperty(1, x => x.Name);
}
}
然后可以像往常一樣解析 CSV 數(shù)據(jù):
[Test]
public void CustomEnumConverterTest()
{
CsvParserOptions csvParserOptions = new CsvParserOptions(true, ';');
CsvReaderOptions csvReaderOptions = new CsvReaderOptions(new[] { Environment.NewLine });
CsvVehicleMapping csvMapper = new CsvVehicleMapping();
CsvParser<Vehicle> csvParser = new CsvParser<Vehicle>(csvParserOptions, csvMapper);
var stringBuilder = new StringBuilder()
.AppendLine("VehicleType;Name")
.AppendLine("Car;Suzuki Swift")
.AppendLine("Bike;A Bike");
var result = csvParser
.ReadFromString(csvReaderOptions, stringBuilder.ToString())
.ToList();
Assert.AreEqual(VehicleTypeEnum.Car, result[0].Result.VehicleType);
Assert.AreEqual("Suzuki Swift", result[0].Result.Name);
Assert.AreEqual(VehicleTypeEnum.Bike, result[1].Result.VehicleType);
Assert.AreEqual("A Bike", result[1].Result.Name);
}
是不是很容易?
總結
本文介紹了C# CSV解析器TinyCsvParser使用示例:解析枚舉,你還可以通過以下文章參閱TinyCsvParser更多使用示例。
相關文章