Web API返回XML元素按字母重排,如何配置保持声明顺序?
解决XML响应元素自动重排的方案
嗨,针对你遇到的XML响应元素被按字母序重排的问题,其实可以通过给数据类添加序列化属性或者调整配置来解决,分两种常见情况给你说明:
如果你的Web API默认使用DataContractSerializer(这是ASP.NET Web API的默认XML序列化器):
你需要给数据类加上[DataContract]特性,然后给每个需要控制顺序的属性/字段加上[DataMember(Order = n)]特性,这里的n是你想要的顺序编号,从0开始依次递增就行。这样XML序列化时就会严格按照你指定的Order顺序输出元素,不会再自动按字母排序。举个实际代码例子:
[DataContract] public class UserInfo { [DataMember(Order = 0)] public string Username { get; set; } [DataMember(Order = 1)] public int Age { get; set; } [DataMember(Order = 2)] public string Email { get; set; } }这样XML响应里的元素就会按Username、Age、Email的顺序出现,和类里声明的顺序一致。
如果想切换使用XmlSerializer:
首先你需要在Web API的配置类(比如WebApiConfig.cs)里开启XmlSerializer的使用:public static void Register(HttpConfiguration config) { // 启用XmlSerializer代替默认的DataContractSerializer config.Formatters.XmlFormatter.UseXmlSerializer = true; // 其他配置... }然后给数据类的每个属性加上
[XmlElement(Order = n)]特性来指定顺序,代码示例:public class UserInfo { [XmlElement(Order = 0)] public string Username { get; set; } [XmlElement(Order = 1)] public int Age { get; set; } }
简单来说,核心就是给XML序列化器明确指定每个元素的输出顺序,这样就不会被自动重排啦。
内容的提问来源于stack exchange,提问作者codePenny
相关产品推荐
相关产品推荐

