Использование отражения для создания класса (для создания динамического класса FileHelper)

Могу ли я создать класс, как показано ниже, динамически, используя отражение? Нет методов, только общедоступные переменные, некоторые из них имеют настраиваемые атрибуты.

Требуется ли метод .Emit (из того, что я видел, "Emit" выглядит немного сложным).

Я использую программное обеспечение из www.FileHelpers.net , и для этого требуется class. Все мои определения файлов находятся в таблице базы данных, и я хотел бы сделать все более динамичным (т.е. не менять код, когда в файле появляется новый столбец).

[FileHelpers.DelimitedRecord(",")]
public class FileRow
{
    [FileHelpers.FieldQuoted('"', QuoteMode.OptionalForBoth)] 
    public string Borrower_First_Name;
    [FileHelpers.FieldQuoted('"', QuoteMode.OptionalForBoth)] 
    public string Borrower_Last_Name;
    public string Borrower_Email;
}

Обновление 1: на основе ответа Влада ниже, мне нужно Чтобы сослаться на DLL, вот как я это сделал:

    // need to reference the FileHelpers.dll from our own .exe directory 
    string diskFilenameFileHelpersDLL = 
        System.IO.Path.GetDirectoryName(
           System.Reflection.Assembly.GetExecutingAssembly().Location) + 
           @"\FileHelpers.dll";

Обновление 2: Кроме того, после того, как я сделал то, что предложил Влад, вот как я вызываю FileHelper и просматриваю результаты. Я, вероятно, перенесу данные в список.

    Assembly assembly = compiledResult.CompiledAssembly;

    // Simple Data Test 
    lineContents = "John,Doe,jd123456@yahoo.com";
    FileHelperEngine engine = new FileHelperEngine(assembly.GetType("FileRow"));
    // FileRow[] FileRowArray = (FileRow[])engine.ReadString(lineContents);
    Object[] FileRowArray = engine.ReadString(lineContents);
    Object myObject = FileRowArray[0];  // only 1 row of data in this example 

    // Get the type handle of a specified class.
    Type myType = assembly.GetType("FileRow");
    // Get the fields of the specified class.
    FieldInfo[] myField = myType.GetFields();

    Console.WriteLine("\nDisplaying fields values:\n");
    for (int i = 0; i < myField.Length; i++)
    {
        Object objTest = myField.GetValue(i);

        string tempName = myField[i].Name;
        Object objTempValue = myField[i].GetValue(myObject);
        string tempValue = System.Convert.ToString(objTempValue);

        Console.WriteLine("The value of {0} is: {1}",
                            tempName, tempValue);

    }

6
задан Marcos Meli 3 August 2015 в 17:27
поделиться