Я реализовал Swagger / Swashbuckle в своем приложении AspNetCore 2.1, и он отлично работает.Однако некоторые из моих моделей API основаны на сложных XML-сервисах WCF и используют несколько аннотаций System.Xml.Serialization для добавления пространств имен и изменения имен свойств.Когда эти модели просматриваются на странице Swagger, они пропускают пространства имен и игнорируют любые изменения имени атрибута.Поэтому запросы по умолчанию на сваггер не будут десериализованы при публикации на мой контроллерС другой стороны, запросы JSON работают нормально.
Рассмотрим эти два класса;
public class test
{
[System.Xml.Serialization.XmlElementAttribute(Namespace = "http://www.example.com/ns/v1")]
public test_c ct1 { get; set; }
public string t2 { get; set; }
}
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://www.example.com/ns/v1")]
public class test_c
{
[System.Xml.Serialization.XmlElementAttribute("my-new-name")]
public string tc1 { get; set; }
public string tc2 { get; set; }
}
При сериализации в XML мы получаем что-то вроде:
<?xml version="1.0" encoding="UTF-8"?>
<test xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<ct1 xmlns="http://www.example.com/ns/v1">
<my-new-name>aaa</my-new-name>
<tc2>xxxxxx</tc2>
</ct1>
<t2>bbb</t2>
</test>
Эточто такое XML, который ожидается в качестве запроса.Тем не менее, образец запроса чванства отображается как:
<?xml version="1.0" encoding="UTF-8"?>
<test>
<ct1>
<tc1>string</tc1>
<tc2>string</tc2>
</ct1>
<t2>string</t2>
</test>
, который не будет десериализоваться при публикации.
Так что теперь к сути.Все, что мне нужно / надеюсь сделать, - это изменить XML-схему запроса swagger, не затрагивая при этом схему запроса JSON (я даже не знаю, являются ли они или могут быть отдельными).Я думал, что это будет просто, но я потерял море опций и настроек.Я надеялся, что смогу просто назначить сериализатор aspnet xml для десериализации предоставленного объекта запроса.Или внедрить ISchemaFilter или IOperationsFilter?
Если бы кто-то мог указать мне правильное направление, я был бы всегда благодарен.