我有以下記錄(減少爲了簡潔):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