我有以下记录(减少为了简洁):FileHelpers不能转换的字段映射到目的地阵列
[DelimitedRecord(",")]
[IgnoreFirst]
[IgnoreEmptyLines()]
public class ImportRecord
{
[FieldQuoted]
[FieldTrim(TrimMode.Both)]
public string FirstName;
[FieldQuoted]
[FieldTrim(TrimMode.Both)]
public string LastName;
[FieldQuoted]
[FieldTrim(TrimMode.Both)]
[FieldOptional]
[FieldConverter(typeof(TestPropertyConverter))]
public int[] TestProperty;
}
转换代码:
public class TestPropertyConverter : ConverterBase
{
public override object StringToField(string from)
{
var ret = from.Split('|').Select(x => Convert.ToInt32(x)).ToArray();
return ret;
}
}
所以一个例子记录可以是: 约翰,史密斯,1 | 2 | 3 | 4
它将期待值1,2,3,4膨胀并填充TestProperty阵列。然而,我发现了以下异常:
源数组中至少一个元素不能被抛弃到目标数组类型。
我试过调试到代码中,它似乎在FieldBase.cs中的ExtractFieldValue()函数中试图返回该函数。 下面的行似乎是罪魁祸首:
res.ToArray(ArrayType);
这似乎期望“RES”变量是目标类型的数组,但它包含数组本身的1个元素。
任何人都可以提出,如果我这样做是错误的或可能的解决?
嗨,真的很感谢这个你的帮助。我的例子比我的实际问题简单一点,我需要能够从我的转换器返回。我的实际应用程序有多个需要导入的注释,它们使用单个和双个管道字符,例如2011-01-01T10:00 |注1 || 2011-02-01T11:00 |注2 ||等等...你认为有这个解决方案吗? – jaffa
如果这很复杂,将'TestProperty'更改为一个普通的'String',然后在生成的'ImportRecords'上执行'foreach'可能会更容易,以便进一步解析TestProperty。但看到我的答案另一种方法。 – shamp00