C# XmlSerializer忽略WebApi中的[XmlAttribute]
我有一个WebApi,它返回一个简单的对象,但是当我强制它以XML形式返回时(C# XmlSerializer忽略WebApi中的[XmlAttribute],c#,asp.net-web-api,xmlserializer,C#,Asp.net Web Api,Xmlserializer,我有一个WebApi,它返回一个简单的对象,但是当我强制它以XML形式返回时(Accept:application/XML),它会忽略我在对象上设置的[xmldattribute]属性 这是我的目标: public class Foo { [XmlAttribute] public string Bar { get; set; } } 我在代码中这样返回它: [RoutePrefix("api/mytest")] public class MyTestController :
Accept:application/XML
),它会忽略我在对象上设置的[xmldattribute]
属性
这是我的目标:
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。这对我来说很有效。。。无需更改全局配置
var configuration = new HttpConfiguration();
configuration.Formatters.XmlFormatter.UseXmlSerializer = true;
return Request.CreateResponse(HttpStatusCode.OK, myObjectToSerialize, configuration);
“简单对象”的类型是什么?我觉得你的Foo Bar不是你真正的代码。你是对的,Foo Bar不是我真正的代码,但我确实用我在问题中描述的东西重新创建了这个问题,所以我真正的代码并不重要,因为Foo Bar也失败了。我有一个
HttpConfiguration
configuration对象,我做了一个config.Formatters.XmlFormatter.UseXmlSerializer=true用于启动WebApi的对象上的代码>。不幸的是,这没有任何效果。