XmlSerializer忽略WebApi中的[XmlAttribute]

GTH*_*ten 4 c# xmlserializer asp.net-web-api

我有一个WebApi返回一个简单的对象,但当我强制它返回XML(Accept: application/xml)时,它忽略了[XmlAttribute]我在对象上设置的属性.

这是我的目标:

public class Foo
{
    [XmlAttribute]
    public string Bar { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我在代码中将其返回:

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

生成的XML是:

<Foo>
    <Bar>foobar</Bar>
</Foo>
Run Code Online (Sandbox Code Playgroud)

而我希望它会像这样返回:

<Foo Bar="foobar">
</Foo>
Run Code Online (Sandbox Code Playgroud)

为什么WebApi使用的XmlSerializer会忽略该[XmlAttribute]属性,如何让它像我想的那样工作?

Jam*_*Dev 6

尝试将WebApi中的此全局配置值设置为true

GlobalConfiguration.Configuration.Formatters.XmlFormatter.UseXmlSerializer = true;
Run Code Online (Sandbox Code Playgroud)

默认情况下,Web API在XmlMediaTypeFormatter中使用DataContractSerializer.