ASP.NET Web API - привязка модели, не работающая с данными XML на POST

Мне не удалось получить привязку модели к работе при выполнении POST с использованием данных XML с помощью ASP.NET Web API. Данные JSON работают нормально.

Используя новый проект Web API, вот мои классы моделей:

public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

public class PostResponse
{
    public string ResponseText { get; set; }
}

Вот мой метод сообщения в контроллере:

    public PostResponse Post([FromBody]Person aPerson)
    {
        var responseObj = new PostResponse();
        if (aPerson == null)
        {
            responseObj.ResponseText = "aPerson is null";
            return responseObj;
        }

        if (aPerson.FirstName == null)
        {
            responseObj.ResponseText = "First Name is null";
            return responseObj;
        }

        responseObj.ResponseText = string.Format("The first name is {0}", aPerson.FirstName);
        return responseObj;
    }

Я могу успешно запустить его с JSON от Fiddler:

Заголовок запроса:
User-Agent: Fiddler
Хост: localhost: 49188
Content-Type: application/json; кодировка = UTF-8
Content-Length: 38

Тело запроса
{ "FirstName": "Томь", "LastName": "Джонс" }

Результат:
{ "ResponseText": "Первое имя - Tom" }

При передаче в XML объект Person не гидратируется правильно:

Заголовок запроса:
User-Agent: Fiddler
Хост: localhost: 49188
Content-Type: text/xml
Контент-длина: 79

Тело запроса
< & Персона GT;
    <FirstName> Том </FirstName>
    < ЬазШате > Jones </ЬазШате >
</Person>

Результат:
<ResponseText> aPerson - это нуль </ResponseText>

Из того, что я понимаю, XML должен работать аналогично JSON. Любые предложения о том, что здесь отсутствует?

Спасибо,
Пропустить

Ответ 1

Добавьте это в свой WebApiConfig.cs:

config.Formatters.XmlFormatter.UseXmlSerializer = true;

Этот принудительный веб-API использует XMLSerializer вместо DataContractSerializer и позволяет передавать необработанный XML.

В противном случае вам нужно пройти полностью квалифицировать datacontract XML i.e.:

<Person xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/Test.WebAPI.Controllers">
<FirstName>a</FirstName>
<LastName>b</LastName>
</Person>