問:我用下面的類序列化CSV文件System.Reflection,如何獲取字段和屬性的位置?
List<MyCsvFileType>
然後我用
MyConvertTo轉換
List<MyCsvFileType>
到DataTable
(以下也列出)。 現在的問題是,MyConvertTo更改列的位置,這意味着所有屬性在所有公共變量之後來到 。
這個問題導致的問題是之後我使用SqlBulkCopy將DataTable複製到數據庫表中。 不幸的是,SqlBulkCopy使用列的索引而不是列名來自動映射到數據庫表的數據表 。
這意味着我得到很好的錯誤消息,因爲它試圖插入浮動區域領域的字母數字AP_FL_CADKey (因爲我的數據庫表有佈局的類一樣)......
有什麼辦法我可以在MyConvertTo中獲得字段&屬性的位置? 因此,我不必更改我的數據庫表(批次)或編寫自己的BulkCopy實現, ,因爲我不想手動設置數據表和數據庫表之間的映射關係?
應該通過排序由字段偏移是可能的,在最壞的情況...
類別:
[FileHelpers.IgnoreFirst]
[FileHelpers.IgnoreEmptyLines]
public class MyCsvFileType
{
public string FL_CADKey;
public string FL_DWG;
public string FL_ObjID;
public string FL_Area;
public double FL_Area_double
{
get
{
if (string.IsNullOrEmpty(this.FL_Area))
return 0.0;
else
return System.Convert.ToDouble(this.FL_Area);
}
} // End Property PP_Area_double
public string AP_FL_CADKey;
public System.Guid UID
{
get
{
return System.Guid.NewGuid();
}
} // End Property UID
}
MyConvertTo:
public static DataTable MyConvertTo(dynamic custs)
{
DataTable dt = MyCreateTable(custs);
System.Data.DataRow dr = null;
foreach (dynamic cli in custs)
{
Console.WriteLine();
Type t = cli.GetType();
dr = dt.NewRow();
foreach (System.Reflection.FieldInfo fi in t.GetFields())
{
dr[fi.Name] = fi.GetValue(cli);
}
foreach (System.Reflection.PropertyInfo pi in t.GetProperties())
{
dr[pi.Name] = pi.GetValue(cli, null);
}
dt.Rows.Add(dr);
} // Next cli
return dt;
}
public static DataTable MyCreateTable(dynamic custs)
{
DataTable table = new DataTable("Table_1");
foreach (dynamic cli in custs)
{
Console.WriteLine();
Type t = cli.GetType();
foreach (System.Reflection.FieldInfo fi in t.GetFields())
{
table.Columns.Add(fi.Name, fi.FieldType);
//Console.WriteLine(fi.Name + ": " + fi.GetValue(cli));
}
foreach (System.Reflection.PropertyInfo pi in t.GetProperties())
{
table.Columns.Add(pi.Name, pi.PropertyType);
//Console.WriteLine(pi.Name + ": " + pi.GetValue(cli, null));
}
break;
} // Next cli
return table;
}
不,但你可以創建一個像PositionAttribute(Position = 1)等屬性 – 2012-04-04 09:27:32
@Adrian Iftode:呃,我寧願寫我自己的序列化程序。 – 2012-04-04 09:39:01
大多數序列化程序使用基於屬性的序列化來獲取有關屬性,類的元數據.. – 2012-04-04 09:39:52