Изменить порядок элементов при сериализации XML - PullRequest
22 голосов
/ 23 июня 2011

Мне нужно сериализовать объект в XML и обратно.XML исправлен, и я не могу его изменить.Я не могу создать эту структуру после bookingList.

Как можно "сгруппировать" эти <booking> элементы, чтобы они отображались в виде списка и сохранять <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; }
        }
    }

Ответы [ 2 ]

32 голосов
/ 23 июня 2011

Попробуйте декорировать свойства класса bookingList с помощью XmlElementAttribute , чтобы управлял тем, как объекты этого класса будут сериализованы в 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>

Связанные ресурсы:

0 голосов
/ 19 марта 2015

Я столкнулся с этой проблемой и решил ее ... Ну, это очень интересно, и это ошибка в .net может быть.

проблема здесь: public List<booking> booking= new List<booking>();

Вы должны использовать: public List<booking> booking { get; set; }

И вы получите определенный порядок .... но почему?кто знает ...:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...