http 响应 - 指定 xml 元素的顺序

http response - specifying order of xml elements

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

(application/json 或 application/xml)

这是数据的片段 class 我正在 returning:

    public int ID { get; set; }

    public string ProductTitle { get; set; }

    public string Artist { get; set; }

    public string EAN_Code { get; set; }

对于 json 响应,name/value 对的 return 顺序与它们在 class 中声明的顺序相同:

[
    {
        "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>

我可以设置一些 property/configuration 来阻止重新排列元素吗?


目前我只有:

        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;
                }
            })

but the xml response rearranges the elements alphabetically:

这是 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; }
}