[ Foro de C# ]

Serializar elementos mismo nombre

28-Dec-2021 00:08
Invitado (JuananPf)
2 Respuestas

Hola.

Necesitaba obtener un xml exactamente igual a este:
<Dimension>
           <element>MM9</element>
           <element>JKS</element>
           <element>FFES</element>
</Dimension>

Tengo la clase dimension asi:

public class Dimension

   {
       [XmlElement("element")]
       public string element1 { get; set; }
       [XmlElement("element")]
       public string element2 { get; set; }
       [XmlElement("element")]
       public string element3 { get; set;
}


Pero al serializar me dice que no puede haber elementos con el mismo nombre("element"). He intentado modificando el nombre con XmlAttributeOverrides, pero me da exactamente el mismo error. ¿Se os ocurre como podía hacer esto?


Uso serialización XML
System.Xml.Serialization.XmlSerializer x = new System.Xml.Serialization.XmlSerializer(Dimension.GetType());
x.Serialize(Console.Out, Dimension);

Muchas gracias.


28-Dec-2021 12:58
Nacho Cabanes (+83)

Claro, un objeto no puede haber dos atributos con el mismo nombre. ¿Has probado a crearlo como lista de objetos "componente"? ¿Debes usar XmlSerializer forzosamente?


28-Dec-2021 14:26
Invitado (JuananPf)

Hola Nacho.

Gracias por la respuesta. Anteriormente tuve que hacer uno parecido donde element se repetia varias veces, pero vacio:
          <element></element>
          <element></element>
          <element></element>

Esto lo hice lo consegui serializar haciendolo así:

Tengo la clase element sin nada:
public class element {}

He creado un lista de element:
public List<element> Dimension = new List<element>();

Y la "relleno" de esta forma:
element Dimension = new element();
Dimension.Add(Dimension);
Dimension.Add(Dimension);
Dimension.Add(Dimension);

Así consigo el xml que me solicitan, con los 3 element vacios, con el mismo nombre. El problema es que en este segundo xml, necesito cubrir esos elements con datos y manteniendo el mismo nombre.  Se te ocurre como lo puedo hacer?? Mil gracias. Un saludo.






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)