2011-06-23 24 views
17

Necesito serializar un Objeto a XML y volver. El XML es arreglado y no puedo cambiarlo. No puedo generar esta estructura después de bookingList.Cambiar el orden de los elementos al serializar XML

¿Cómo puedo "grupo" <booking> estos elementos para aparecer como una lista y mantener <error> & <counter> antes de la lista de elementos <booking>.

Ver mi ejemplo aquí:

Estructura necesito ....

<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> 

Estructura me sale con el código C# a continuación ....

<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# Código:

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

Respuesta

25

Pruebe decorar el profesional perties de la clase bookingList con XmlElementAttribute, para controlar cómo los objetos de esa clase se serializarán en XML.

He aquí un ejemplo:

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

En mi prueba obtuve este resultado:

<?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> 

recursos relacionados:

+0

thx ... Orden del elemento ... por qué no obtengo esto del msdn .... GRACIAS –

+0

No sabía sobre este "elemento". ¡Muchas gracias! –

-3

Me enfrentaba a este problema y lo resolví ... Bueno, es muy interesante, y este es un error en .net tal vez.

el problema está aquí: public List<booking> booking= new List<booking>();

que puedes usar: public List<booking> booking { get; set; }

y obtendrá el orden definido .... pero ¿por qué? quién sabe ... :)

Cuestiones relacionadas