如何使用FileHelper库来获取分隔符的数目



使用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的字符串。

相关内容

  • 没有找到相关文章

最新更新