XmlSerializer忽略WebApi中的[XmlAttribute]

时间:2016-03-07 14:57:27

标签: c# asp.net-web-api xmlserializer

我有一个返回一个简单对象的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> 属性,我怎样才能让它像我想的那样工作?

2 个答案:

答案 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);