我有一个返回一个简单对象的WebApi,但是当我强制它以XML(_searchNodeResult
)形式返回时,它忽略了我在对象上设置的Accept: application/xml
属性。
这是我的目标:
[XmlAttribute]
我在代码中将其返回:
public class Foo
{
[XmlAttribute]
public string Bar { get; set; }
}
生成的XML是:
[RoutePrefix("api/mytest")]
public class MyTestController : System.Web.Http.ApiController
{
[HttpGet]
[Route("gettest")]
public Foo GetTest()
{
return new Foo() { Bar = "foobar" };
}
}
虽然我希望它会像这样返回:
<Foo>
<Bar>foobar</Bar>
</Foo>
为什么WebApi使用的XmlSerializer会忽略<Foo Bar="foobar">
</Foo>
属性,我怎样才能让它像我想的那样工作?
答案 0 :(得分:5)
尝试将WebApi中的此全局配置值设置为true
GlobalConfiguration.Configuration.Formatters.XmlFormatter.UseXmlSerializer = true;
默认情况下,Web API在XmlMediaTypeFormatter中使用DataContractSerializer。
答案 1 :(得分:1)
这对我有用......无需改变全局配置。
var configuration = new HttpConfiguration();
configuration.Formatters.XmlFormatter.UseXmlSerializer = true;
return Request.CreateResponse(HttpStatusCode.OK, myObjectToSerialize, configuration);