¿Cómo reemplazar el nombre del elemento xml para los elementos de la colección utilizando XmlAttributeOverrides?

Tengo un modelo de objeto objeto muy básico que está siendo serializado por las cosas System.Xml.XmlSerialization. Necesito usar la funcionalidad XmlAttributeOverrides para establecer los nombres de los elementos xml para una colección de elementos secundarios.

public class Foo{ public List Bars {get; set; } } public class Bar { public string Widget {get; set; } } 

utilizando el serializador xml estándar, esto saldría como

    ...   

Necesito usar los atributos XmlOverrideAttributes para decir esto

    ...   

pero parece que no puedo cambiar el nombre de los elementos secundarios de la colección … puedo cambiar el nombre de la colección en sí … puedo cambiar el nombre de la raíz … no estoy seguro de lo que estoy haciendo mal.

Aquí está el código que tengo ahora:

 XmlAttributeOverrides xOver = new XmlAttributeOverrides(); var bars = new XmlElementAttribute("SomethingElse", typeof(Bar)); var elementNames = new XmlAttributes(); elementNames.XmlElements.Add(bars); xOver.Add(typeof(List), "Bars", elementNames); StringBuilder stringBuilder = new StringBuilder(); StringWriter writer = new StringWriter(stringBuilder); XmlSerializer serializer = new XmlSerializer(typeof(Foo), xOver); serializer.Serialize(writer, someFooInstance); string xml = stringBuilder.ToString(); 

pero esto no cambia el nombre del elemento en absoluto … ¿qué estoy haciendo mal?

Gracias

Para hacer eso, quieres [XmlArray] y [XmlArrayItem] (idealmente ambos para hacerlo explícito):

 using System.Collections.Generic; using System.IO; using System.Xml.Serialization; public class Foo { public List Bars { get; set; } } public class Bar { public string Widget { get; set; } } static class Program { static void Main() { XmlAttributeOverrides xOver = new XmlAttributeOverrides(); xOver.Add(typeof(Foo), "Bars", new XmlAttributes { XmlArray = new XmlArrayAttribute("Bars"), XmlArrayItems = { new XmlArrayItemAttribute("SomethingElse", typeof(Bar)) } }); XmlSerializer serializer = new XmlSerializer(typeof(Foo), xOver); using (var writer = new StringWriter()) { Foo foo = new Foo { Bars = new List { new Bar { Widget = "widget"} }}; serializer.Serialize(writer, foo); string xml = writer.ToString(); } } } 

Derick,

Esto me funcionó, no estoy seguro de si es una respuesta adecuada para ti o no:

 public class Foo { [XmlArrayItem(ElementName = "SomethingElse")] public List Bars { get; set; } } 
    Intereting Posts