c# - 序列化 XML 时更改元素的顺序

标签 c# xml list xml-serialization

我需要将对象序列化为 XML 并返回。 XML 已修复,我无法更改它。 我无法在 bookingList 之后生成此结构。

我如何“分组”这些 <booking> 元素以显示为 LIST,并在这个 <error> 元素列表之前保留 <counter> & <booking>

在这里看我的例子:

我需要的结构....

<nicexml>
<key_id>1234567</key_id>
<surname>Jil</surname>
<name>Sander</name>
<station_id>1</station_id>
<ownBookings>
    <bookingList>
        <error></error>
        <counter>20</counter>
        <booking>
             <bookingID>1234567890</bookingID>
        </booking>
        <booking>
             <bookingID>2345678901</bookingID>
        </booking>
    </bookingList>
</ownBookings>
</nicexml>

我用下面的 C# 代码得到的结构....

<nicexml>
<key_id>1234567</key_id>
<surname>Jil</surname>
<name>Sander</name>
<station_id>1</station_id>
<ownBookings>
    <bookingList>
           <booking>
        <booking>
             <bookingID>1234567890</bookingID>
        </booking>
        <booking>
             <bookingID>2345678901</bookingID>
        </booking>
             <booking>
        <error></error>
        <counter>20</counter>
    </bookingList>
</ownBookings>
</nicexml>

C#代码:

using System;
using System.Xml.Serialization;
using System.Collections.Generic;

namespace xml_objects_serials
{
    public class bookings
    {
        public class nicexml
        {
            public string key_id
            { get; set; }

            public string surname
            { get; set; }

            public string name
            { get; set; }

            public int station_id
            { get; set; }

            public ownBookings ownBookings
            { get; set; }

        }

        public class ownBookings
        {
            public bookingList bookingList
            { get; set; }

        }
        public class bookingList {
            public string error 
            { get; set; }
            public int counter
            { get; set; }
            public List<booking> booking= new List<booking>();
        }

        public class booking
        {
            public int bookingID
            { get; set; }
        }
    }

最佳答案

尝试用 XmlElementAttribute 修饰 bookingList 类的属性,以便控制该类的对象将如何序列化为 XML

这是一个例子:

public class bookingList
{
    [XmlElement(Order = 1)]
    public string error { get; set; }
    [XmlElement(Order = 2)]
    public int counter { get; set; }
    [XmlElement(ElementName = "booking", Order = 3)]
    public List<booking> bookings = new List<booking>();
}

public class booking
{
    public int id { get; set; }
}

在我的测试中,我得到了这个输出:

<?xml version="1.0" ?> 
<bookingList>
    <error>sample</error>
    <counter>0</counter>
    <booking>
        <id>1</id> 
    </booking>
    <booking>
        <id>2</id> 
    </booking>
    <booking>
        <id>3</id> 
    </booking> 
</bookingList>

相关资源:

关于c# - 序列化 XML 时更改元素的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6455067/

相关文章:

javascript - xml 添加属性转义 &

javascript - 使用 Javascript 对 XML 数据进行排序

c# - 反转列表的特定部分 C#

python - 如何将列表中的某些分数分配给多个列表中的值并获取 python 中每个值的总和?

c# - 如何以编程方式创建 Google 快讯

c# - WPF 现代 UI - 带图标的 DialogResult

C# 使用自定义 == 运算符检查类是否为空

c# - OLEDB 和 ODBC 有什么区别?

php - MySQL php从数据库获取项目并存储在XML中(重复项目)

c# - 从具有多种用途对象的通用列表中选择或排序 C#