Как связать модель с динамически созданным классом nancyfx

Прежде всего, спасибо всем, кто хочет взглянуть на мою проблему. Я довольно новичок в Nancyfx, и у меня возникают проблемы с попыткой привязать полезную нагрузку JSON к динамически создаваемому классу. Я создал класс динамически, следуя коду в этом посте -Динамически создать класс в C #

Это мой блок кода, который создает динамический класс, который, как я признаю, по сути представляет собой фрагмент кода, заданныйdanijels

 public static Type CompileResultType(List<Metadata> metadata)
    {            
        TypeBuilder tb = GetTypeBuilder();
        ConstructorBuilder constructor = tb.DefineDefaultConstructor(MethodAttributes.Public | MethodAttributes.SpecialName | MethodAttributes.RTSpecialName);

        foreach (var field in metadata)
        {
            if(field.datatype == "String")
            {
               Type datatype = Type.GetType("System.String");
               CreateProperty(tb, field.columnname, datatype);
            }
            if (field.datatype == "int")
            {
                Type datatype = Type.GetType("System.Int32");
                CreateProperty(tb, field.columnname, datatype);
            }
            if(field.datatype == "datetime")
            {
                Type datatype = Type.GetType("System.DateTime");
                CreateProperty(tb, field.columnname, datatype);
            }

        }

        Type objectType = tb.CreateType();

        return objectType;

    }


    private static TypeBuilder GetTypeBuilder()
    {
        var typeSignature = "MyDynamicType";
        var an = new AssemblyName(typeSignature);
        AssemblyBuilder assemblyBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly(an, AssemblyBuilderAccess.Run);
        ModuleBuilder moduleBuilder = assemblyBuilder.DefineDynamicModule("MainModule");

        TypeBuilder tb;

        tb = moduleBuilder.DefineType(typeSignature, TypeAttributes.Public | TypeAttributes.Class | TypeAttributes.AutoClass | TypeAttributes.AnsiClass | TypeAttributes.BeforeFieldInit | TypeAttributes.AutoLayout, null);

        return tb;

    }

    private static void CreateProperty(TypeBuilder tb, string propertyName, Type propertyType)
    {
        FieldBuilder fieldBuilder = tb.DefineField(propertyName, propertyType, FieldAttributes.Public); //changed field attributes from private to public

        PropertyBuilder propertyBuilder = tb.DefineProperty(propertyName, System.Reflection.PropertyAttributes.None, propertyType, null);

        MethodBuilder getPropMethdBldr = tb.DefineMethod("get_" + propertyName, MethodAttributes.Public | MethodAttributes.SpecialName | MethodAttributes.HideBySig, propertyType, Type.EmptyTypes); //changed get_ to get

        ILGenerator getIl = getPropMethdBldr.GetILGenerator();

        getIl.Emit(OpCodes.Ldarg_0);
        getIl.Emit(OpCodes.Ldfld, fieldBuilder);
        getIl.Emit(OpCodes.Ret);

        MethodBuilder setPropMthdBldr = tb.DefineMethod("set_" + propertyName, MethodAttributes.Public | MethodAttributes.SpecialName | MethodAttributes.HideBySig, null, new[] { propertyType }); //changed set_to set

        ILGenerator setIl = setPropMthdBldr.GetILGenerator();
        Label modifyProperty = setIl.DefineLabel();
        Label exitSet = setIl.DefineLabel();

        setIl.MarkLabel(modifyProperty);
        setIl.Emit(OpCodes.Ldarg_0);
        setIl.Emit(OpCodes.Ldarg_1);
        setIl.Emit(OpCodes.Stfld, fieldBuilder);

        setIl.Emit(OpCodes.Nop);
        setIl.MarkLabel(exitSet);
        setIl.Emit(OpCodes.Ret);

        propertyBuilder.SetGetMethod(getPropMethdBldr);
        propertyBuilder.SetGetMethod(setPropMthdBldr);
    }

//List<Metadata> metadata is a Dictionary

Затем я связываю это, делая это

  var myType = CompileResultType(metadata);
  var myObject = Activator.CreateInstance(myType);
  var b = this.BindTo(myObject);

У меня не может быть нормального класса моделей для Нэнси, потому что у меня будет слишком много моделей только для сбора данных.

//usual model class
public Class PayloadModel
{
   public string firstName {get; set;}
   public string lastName {get; set;}
}

Причина, по которой я должен создать класс динамически, состоит в том, что полезная нагрузка JSON, которую я получаю, варьируется от наличия одного поля до наличия 30. Другая причина заключается в том, что я хотел бы сохранить его максимально гибким. и наличие вышеупомянутого класса означает, что я привязан к тому, что находится в этом классе. Любой совет или направление окажет большую помощь!

Ответы на вопрос(1)

Ваш ответ на вопрос