使用FileHelper库如果记录的一行中没有预期数量的分隔符,是否有方法获得异常?
另一个问题是,如果某个特定字段(例如Name(的长度超过预期长度,是否有办法获得异常?
如果我将name设置为maxLength 30,如果它超过30,我会得到一个异常。
或者一个字段根本不等于预期长度?
如果记录在一行中没有预期数量的分隔符,则获取异常
默认FileHelpers行为是在行中没有足够/太多字段的情况下抛出异常,因此无需执行任何特殊操作即可获得异常:
[DelimitedRecord(",")]
public class Test
{
public int SomeInt { get; set; }
public string SomeString { get; set; }
public int SomeInt1 { get; set; }
public override string ToString() =>
$"{SomeInt} - {SomeString} - {SomeInt1}";
}
var result = new FileHelperEngine<Test>()
.ReadString(@"123,That's the string")
.Single();
Console.WriteLine(result);
将导致
FileHelpers.FileHelpersException:行:1列:4。分隔符","不是在字段"k_BackingField"之后找到(记录的字段,分隔符错误,或者下一个字段必须标记为可选(。在位于的FileHelpers.DimitedField.BasicExtractString(LineInfo行(位于的FileHelpers.DimitedField.TextractFieldString(LineInfo行(位于的FileHelpers.FieldBase.TextractFieldValue(LineInfo行(FileHelpers.RecordOperations.StringToRecord(对象记录,LineInfo行,Object[]值(FileHelpers.FileHelperEngine`1.ReadStreamAsList(TextReader阅读器,Int32 maxRecords,DataTable dt(
如果特定字段(例如Name(的长度超过预期长度,是否有方法获得异常
据我所知,FileHelpers不支持开箱即用的标准DataAnnotations(或者它实际上可以支持它,但由于https://github.com/dotnet/standard/issues/450),因此您可能需要手动添加验证
所以,你安装https://www.nuget.org/packages/System.ComponentModel.Annotations/4.4.0
然后通过将[StringLength(maximumLength: 5)]
添加到模型上的SomeString
属性
[DelimitedRecord(",")]
public class Test
{
public int SomeInt { get; set; }
[StringLength(maximumLength: 5)]
public string SomeString { get; set; }
public int SomeInt1 { get; set; }
public override string ToString() =>
$"{SomeInt} - {SomeString} - {SomeInt1}";
}
带
var result = new FileHelperEngine<Test>()
.ReadString(@"123,That's the string, 456")
.Single();
Console.WriteLine(result);
var context = new ValidationContext(result, serviceProvider: null, items: null);
var results = new List<ValidationResult>();
var isValid = Validator.TryValidateObject(result, context, results, validateAllProperties: true);
if (!isValid)
{
Console.WriteLine("Not valid");
foreach (var validationResult in results)
{
Console.WriteLine(validationResult.ErrorMessage);
}
}
您将得到以下输出
无效
字段SomeString必须是最大长度为5的字符串。