【问题标题】:http response - specifying order of xml elementshttp 响应 - 指定 xml 元素的顺序
【发布时间】:2018-03-09 15:13:21
【问题描述】:

我有一个简单的 Web API,它将返回 json 或 xml,具体取决于请求中的接受标头。

(应用程序/json 或应用程序/xml)

这是我返回的数据类的 sn-p:

    public int ID { get; set; }

    public string ProductTitle { get; set; }

    public string Artist { get; set; }

    public string EAN_Code { get; set; }

对于 json 响应,名称/值对按照它们在类中声明的顺序返回:

[
    {
        "ID": 1,
        "ProductTitle": "Product 1",
        "Artist": "Artist 1",
        "EAN_Code": "1234567890123",

但 xml 响应按字母顺序重新排列元素:

    <Artist>Artist 1</Artist>
    <EAN_Code>1234567890123</EAN_Code>
    <ID>1</ID>
    <ProductTitle>Product 1</ProductTitle>

我可以设置一些属性/配置来阻止重新排列元素吗?


目前我只有:

        services.AddMvc()
            .AddMvcOptions(o => o.OutputFormatters.Add(
                new XmlDataContractSerializerOutputFormatter()))
            .AddJsonOptions(o =>
            {
                if (o.SerializerSettings.ContractResolver != null)
                {
                    var castedResolver = o.SerializerSettings.ContractResolver
                    as DefaultContractResolver;
                    castedResolver.NamingStrategy = null;
                }
            })

【问题讨论】:

    标签: xml asp.net-core-mvc httpresponse asp.net-core-webapi


    【解决方案1】:

    但 xml 响应按字母顺序重新排列元素:

    这是 XML 序列化的默认行为,没有任何设置。

    对于解决方法,您可以为属性指定Order

    [DataContract]
    public class JsonXML
    {
        [DataMember(Order =1)]
        public int ID { get; set; }
        [DataMember(Order = 2)]
    
        public string ProductTitle { get; set; }
        [DataMember(Order = 3)]
    
        public string Artist { get; set; }
        [DataMember(Order = 4)]
    
        public string EAN_Code { get; set; }
    }
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多