0
[Serializable]
public class CampoAuxiliar
{
    private string descripcionAuxiliar;
    private DateTime fechaAuxiliar;
    private ArrayList opcion;

    public CampoAuxiliar() { }

    [XmlElement(ElementName = "descripcionAuxiliar", Type = typeof(string))]
    public string DescripcionAuxiliar
    {
        get { return descripcionAuxiliar; }
        set { descripcionAuxiliar = value; }
    }

    [XmlElement(ElementName = "fechaHabilitacion", Type = typeof(DateTime))]
    public DateTime FechaAuxiliar
    {
        get { return fechaAuxiliar; }
        set { fechaAuxiliar = value; }
    }

    [XmlArrayItem(ElementName = "opcion", Type = typeof(Opcion))]
    [XmlArray(ElementName = "AuxiliarA")]
    public ArrayList Opcion
    {
        get { return opcion; }
        set { opcion = value; }
    }
}

And this is my xml

- <auxiliarA>
  <descripcionAuxiliar>Campo A</descripcionAuxiliar> 
  <fechaHabilitacion>2017-04-19</fechaHabilitacion> 
+ <opcion>
  <codigoOpcion>01</codigoOpcion> 
  <descripcionOpcion>1</descripcionOpcion> 
  </opcion>
+ <opcion>
  <codigoOpcion>02</codigoOpcion> 
  <descripcionOpcion>2</descripcionOpcion> 
  </opcion>
+ <opcion>
  <codigoOpcion>03</codigoOpcion> 
  <descripcionOpcion>3</descripcionOpcion> 
  </opcion>
</auxiliarA>

My problem is I can't figure out how to serialize the "opcion" array into the ArrayList opcion of the class. With this case it does work and assigns the other nodes properly except for the ArrayList one which returns me count = 0.

Gonzalo
  • 55
  • 1
  • 8
  • 1
    Have you tried simply decorating the Opcion property with [XmlElement(ElementName ="opcion")]? It worked for me. – noriMonsta Apr 19 '17 at 21:32
  • OMG this worked! Thank you so much, I've been trying to solve it all day, trying everything but the obvious. Again, thank you! – Gonzalo Apr 20 '17 at 12:23

1 Answers1

0

You can modify your CampoAuxiliar class as follows:

[XmlRoot("auxiliarA")]
[XmlType("auxiliarA")]
public class CampoAuxiliar
{
    private string descripcionAuxiliar;
    private DateTime fechaAuxiliar;

    public CampoAuxiliar() { }

    [XmlElement(ElementName = "descripcionAuxiliar", Type = typeof(string))]
    public string DescripcionAuxiliar
    {
        get { return descripcionAuxiliar; }
        set { descripcionAuxiliar = value; }
    }

    [XmlElement(ElementName = "fechaHabilitacion", Type = typeof(DateTime))]
    public DateTime FechaAuxiliar
    {
        get { return fechaAuxiliar; }
        set { fechaAuxiliar = value; }
    }

    private ArrayList opcion;

    [XmlElement("opcion", Type = typeof(Opcion))]
    public ArrayList Opcion
    {
        get { return opcion; }
        set { opcion = value; }
    }
}

In addition, you should replace the ArrayList with a List<Opcion>:

    private List<Opcion> opcion;

    [XmlElement("opcion")]
    public List<Opcion> Opcion
    {
        get { return opcion; }
        set { opcion = value; }
    }

Notes:

Sample fiddle.

dbc
  • 104,963
  • 20
  • 228
  • 340