Reflection 从未知对象(.net)生成招摇文件

Reflection 从未知对象(.net)生成招摇文件,reflection,swagger,dynamics-crm,reflection.emit,swagger-codegen,Reflection,Swagger,Dynamics Crm,Reflection.emit,Swagger Codegen,我想开发一个新的API。它必须连接Dynamics CRM和前端开发人员 如今,已开发的“变通方法”是: 填写Excel文件以描述CRM和自定义对象(使用fetchXml,…) 写入并连接字符串以写入YAML文件 将此文件复制到swagger编辑器,并与Postman一起进行测试 在第一步中,我想生成没有字符串连接的模式。。。(暂时,等待用OData和ASP.NET Core替换Excel文件以获得更强大的功能) 目前,我使用反射从Excel文件构建对象: using System.Reflec

我想开发一个新的API。它必须连接Dynamics CRM和前端开发人员

如今,已开发的“变通方法”是:

  • 填写Excel文件以描述CRM和自定义对象(使用fetchXml,…)
  • 写入并连接字符串以写入YAML文件
  • 将此文件复制到swagger编辑器,并与Postman一起进行测试
  • 在第一步中,我想生成没有字符串连接的模式。。。(暂时,等待用OData和ASP.NET Core替换Excel文件以获得更强大的功能)

    目前,我使用反射从Excel文件构建对象:

    using System.Reflection;
    using System.Reflection.Emit;
    using Swashbuckle.Swagger;
    ...
    
    var assemblyName = new AssemblyName(Guid.NewGuid().ToString();
    var assemblyBuilder = AssemblyBuilder.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run);
    var moduleBuilder = assemblyBuilder.DefineDynamicModule("Module");
    var typeBuilder = moduleBuilder.DefineType(entity.CrmEntityName);
    foreach (var attribute in entity.Attributes)
    {
        Type t = typeof(int);
        switch (attribute.DataType.ToLower())
        {
            case "string":
                t = typeof(string);
                break;
            case "integer":
                t = typeof(int);
                break;
            case "date":
                t = typeof(DateTime);
                break;
        }
        typeBuilder.DefineField(attribute.CrmName, t.GetType(), FieldAttributes.Public);
        var type = typeBuilder.CreateType();
    
        // create the Swagger models here
    }
    
    如何从这些类型和属性生成我的招摇?
    我查看了一个名为
    Schema
    的对象,其中包含一个名称和另一个
    Schema
    ,我不知道这是否是一种错误的方式

    可以实现并注册IDocumentFilter,在其中可以注册使用TypeBuilder创建的自定义类型

    public class MyDocFilter : Swashbuckle.Swagger.IDocumentFilter
    {
      public void Apply(SwaggerDocument swaggerDoc, SchemaRegistry schemaRegistry, IApiExplorer apiExplorer)
      {
        schemaRegistry.GetOrRegister(MyDynamicType);
      }
    }
    
    确保在SwaggerConfig中注册它,如下所示:

    c.DocumentFilter<MyDocFilter>();
    

    可以实现并注册IDocumentFilter,在其中可以注册使用TypeBuilder创建的自定义类型

    public class MyDocFilter : Swashbuckle.Swagger.IDocumentFilter
    {
      public void Apply(SwaggerDocument swaggerDoc, SchemaRegistry schemaRegistry, IApiExplorer apiExplorer)
      {
        schemaRegistry.GetOrRegister(MyDynamicType);
      }
    }
    
    确保在SwaggerConfig中注册它,如下所示:

    c.DocumentFilter<MyDocFilter>();