我有一个返回一个简单对象的WebApi,但是当我强制它以XML格式返回(Accept:application / xml)时,它忽略了我在对象上设置的[XmlAttribute]属性.
这是我的目标:
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>
为什么WebApi使用的XmlSerializer忽略[XmlAttribute]属性,如何让它像我想的那样工作?
解决方法:
尝试将WebApi中的此全局配置值设置为true
GlobalConfiguration.Configuration.Formatters.XmlFormatter.UseXmlSerializer = true;
默认情况下,Web API在XmlMediaTypeFormatter中使用DataContractSerializer.