2016-03-07 2 views
3

У меня есть WebApi, который возвращает простой объект, но когда я заставляю его возвращать как XML (Accept: application/xml), он игнорирует атрибут [XmlAttribute], который я установил для объекта.XmlSerializer игнорирует [XmlAttribute] в WebApi

Это мой объект:

public class Foo 
{ 
    [XmlAttribute] 
    public string Bar { get; set; } 
} 

И я вернуть его, как это в коде:

[RoutePrefix("api/mytest")] 
public class MyTestController : System.Web.Http.ApiController 
{ 
    [HttpGet] 
    [Route("gettest")] 
    public Foo GetTest() 
    { 
     return new Foo() { Bar = "foobar" }; 
    } 
} 

Результирующий XML является:

<Foo> 
    <Bar>foobar</Bar> 
</Foo> 

В то время как я ожидал для возврата следующим образом:

<Foo Bar="foobar"> 
</Foo> 

Почему XmlSerializer, используемый WebApi, игнорирует атрибут [XmlAttribute] и как я могу заставить его работать так, как я хочу?

+0

Каков тип «простого объекта»? У меня такое чувство, что ваш Foo Bar - это не ваш настоящий код. –

+0

Вы правы, что Foo Bar - это не мой настоящий код, но я действительно воссоздал проблему с тем, что я описал в своем вопросе, поэтому мой настоящий код не имеет значения, поскольку Foo Bar также терпит неудачу. – GTHvidsten

ответ

2

установка этого глобального значения конфигурации в вашем WebAPI истинной

GlobalConfiguration.Configuration.Formatters.XmlFormatter.UseXmlSerializer = true; 

По умолчанию Web API Try использует DataContractSerializer в XmlMediaTypeFormatter.

+0

У меня есть объект конфигурации «HttpConfiguration», и я сделал «config.Formatters.XmlFormatter.UseXmlSerializer = true;» на объекте, который используется для запуска WebApi. К сожалению, это не повлияло. – GTHvidsten

1

Это сработало для меня ... не нужно менять глобальную конфигурацию.

var configuration = new HttpConfiguration(); 
configuration.Formatters.XmlFormatter.UseXmlSerializer = true; 
return Request.CreateResponse(HttpStatusCode.OK, myObjectToSerialize, configuration); 
Смежные вопросы