Глубокое клонирование объектов из кода, сгенерированного Autorest

Я использую Autorest для генерации кода для вызова моего API.

Я хочу использовать следующее в своих модульных тестах

    private JobHeaderRequestObject MakeRequestFromResponse(JobHeaderResponseObject InResponseObject)
{
    // make use of the fact that in the server side code we know  JobHeaderResponseObject inherits from JobHeaderRequestObject 
    return MySerializer.DeepConvert<JobHeaderResponseObject,JobHeaderRequestObject>(InResponseObject);
}


internal class MySerializer
{

    public static T2 DeepConvert<T1,T2>(T1 obj)
    {
        using (var ms = new MemoryStream())
        {
            var formatter = new BinaryFormatter();
            formatter.Serialize(ms, obj);
            ms.Position = 0;
            return (T2)formatter.Deserialize(ms);
        }
    }
}

Однако, когда я пытаюсь запустить этот код, я получаю сообщение об ошибке

System.Runtime.Serialization.SerializationException   

указывает на то, что тип

is not marked as serializable

Я не хочу проходить сгенерированный код, добавляя атрибут

[Сериализуемый]

для каждого типа, потому что код будет перезаписан при следующем создании.

Я просмотрел эту проблему в проекте Git Hub и там упоминается

Если в спецификации чванства есть определение модели, подобное этому

{
  "Foo": {
    "properties": {
      "name": {
        "type": "string"
      },
      "age": {
        "type": "number"
      }
    },
    "additionalProperties": {
      "type": "string"
    }
  }
}

тогда сгенерированные Autorest SDK должны иметь возможность правильно сериализовать и десериализовать (туда-обратно) неизвестные свойства.

Сгенерированные клиенты C# сегодня поддерживают это, имея Dictionary AdditionalProperties.

Итак, теперь я пытаюсь понять, что такое спецификация Autorest и как я ее настраиваю.

В startup.cs у меня в Configure

            app.UseSwagger(c =>
        {
            c.RouteTemplate =
                "api-docs/{documentName}/swagger.json";
        });



        app.UseSwaggerUI(c =>
        {
            //Include virtual directory if site is configured so
            c.RoutePrefix = "api-docs";
            c.SwaggerEndpoint("./v1/swagger.json", "Api v1");

        });

В ConfigureServices у меня есть

        services.AddSwaggerGen(c =>
        {
            c.OperationFilter<AuthorizationHeaderParameterOperationFilter>();
            c.SwaggerDoc("v1", new Info
            {
                Version = "v1",
                Title = "My API",
                Description = "ASP.NET Core Web API",
                TermsOfService = "None",
                Contact = new Swashbuckle.AspNetCore.Swagger.Contact
                {
                    Name = "MyName",
                    Email = "[email protected]"
                }


            });

            c.EnableAnnotations();
            c.DescribeAllEnumsAsStrings();
            c.ParameterFilter<SwaggerEnumParameterFilter>();
            c.SchemaFilter<SwaggerEnumFilter>();
        });

person Kirsten Greed    schedule 30.01.2019    source источник
comment
stackoverflow.com/questions/8935056/   -  person Kirsten Greed    schedule 31.01.2019
comment
github.com/Azure/autorest/issues/2773   -  person Kirsten Greed    schedule 31.01.2019
comment
github.com/Azure/autorest   -  person Kirsten Greed    schedule 31.01.2019
comment
github.com/Azure/autorest/blob/master/docs/ пользователь/cli.md   -  person Kirsten Greed    schedule 31.01.2019
comment
docs.microsoft.com/en-us/aspnet/core/tutorials/   -  person Kirsten Greed    schedule 31.01.2019
comment
support.reprezen. com/support/solutions/articles/   -  person Kirsten Greed    schedule 31.01.2019