2016-03-07 87 views
3

我有一個返回簡單對象的WebApi,但是當我強制它返回XML(Accept: application/xml)時,它忽略了我在對象上設置的[XmlAttribute]屬性。XmlSerializer忽略WebApi中的[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]屬性,以及如何讓它像我想要的那樣工作?

+0

什麼是「簡單對象」的類型?我有一種感覺,你的Foo Bar不是你真正的代碼。 –

+0

你說得對,Foo Bar並不是我真正的代碼,但我確實用我在問題中描述的內容重新創建了這個問題,所以我的真實代碼並不重要,因爲Foo Bar也失敗了。 – GTHvidsten

回答

2

嘗試在你的WebAPI這個全局配置值設置爲true

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

默認的Web API中XmlMediaTypeFormatter使用的DataContractSerializer。

+0

我有一個'HttpConfiguration'配置對象,並且在用於啓動WebApi的對象上做了'config.Formatters.XmlFormatter.UseXmlSerializer = true;'。不幸的是,這沒有效果。 – GTHvidsten

1

這對我有用......無需更改全局配置。

var configuration = new HttpConfiguration(); 
configuration.Formatters.XmlFormatter.UseXmlSerializer = true; 
return Request.CreateResponse(HttpStatusCode.OK, myObjectToSerialize, configuration); 
相關問題