如何在 Web api 响应的 XML 序列化中排除属性名称
本文关键字:序列化 排除 属性 XML Web api 响应 | 更新日期: 2023-09-27 18:32:01
我有一个名为 GetUnitResponse 的类,其定义如下
公共分部类 GetUnitResponse{ [System.ServiceModel.MessageBodyMemberAttribute(Name = "GetUnitResponse", Namespace = ", Order = 0)] [System.Xml.Serialization.XmlArrayItemAttribute("Unit", IsNullable=false)]public UnitOut[]GetUnitResponse1; public GetUnitResponse() { } public GetUnitResponse(UnitOut[] GetUnitResponse1) { 这。GetUnitResponse1 = GetUnitResponse1; }}
我从响应(GetUnitResponse)对象中得到以下xml。
<pre>
<GetUnitResponse xmlns:xsi="" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<GetUnitResponse1>
<Unit day="2016-01-27" ID="572">
</Unit>
<Unit day="2016-01-27" ID="573">
</Unit>
<Unit day="2016-01-27" ID="574">
</Unit>
</GetUnitResponse1>
</GetUnitResponse>
</pre>
客户端希望排除 GetUnitResponse1 标记,生成的 xml 应如下所示:
<pre>
<GetUnitResponse xmlns:xsi="" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Unit day="2016-01-27" ID="572">
</Unit>
<Unit day="2016-01-27" ID="573">
</Unit>
<Unit day="2016-01-27" ID="574">
</Unit>
</GetUnitResponse>
</pre>
如何实现这一点?
默认情况下,ASP.NET Web API 使用该DataContractSerializer
来序列化 XML。遗憾的是,此序列化程序不支持将集合序列化为解包的元素列表。另一方面,XmlSerializer
允许更灵活的XML和更多的自定义。
您可以指示 Web API ASP.NET 而不是默认的序列化程序:
GlobalConfiguration.Configuration.Formatters.XmlFormatter.UseXmlSerializer = true;
现在剩下的就是用 [XmlElement]
属性装饰你的字段:
public partial class GetUnitResponse
{
[XmlElement("Unit")]
public UnitOut[] GetUnitResponse1;
...
}
同样为了更好地封装,我建议您使用属性而不是字段。