Sé que no es aficionado a la idea envoltorio, pero hay una solución que utiliza tanto un envoltorio pero también usa los atributos xml que son muy fáciles de usar. Mi negativa a utilizar el siguiente enfoque es el uso del antiguo serializador.
public class Product
{
[XmlAttribute("id")]
public int Id
{
get;
set;
}
[XmlAttribute("name")]
public string Name
{
get;
set;
}
[XmlAttribute("quantity")]
public int Quantity
{
get;
set;
}
}
[XmlRoot("Products")]
public class Products
{
[XmlAttribute("nid")]
public int Id
{
get;
set;
}
[XmlElement(ElementName = "Product")]
public List<Product> AllProducts { get; set; }
}
Ahora su controlador solo puede devolver los productos como:
public Products Get()
{
return new Products
{
AllProducts = new List<Product>
{
new Product {Id = 1, Name = "Product1", Quantity = 20},
new Product {Id = 2, Name = "Product2", Quantity = 37},
new Product {Id = 3, Name = "Product3", Quantity = 6},
new Product {Id = 4, Name = "Product4", Quantity = 2},
new Product {Id = 5, Name = "Product5", Quantity = 50},
}
};
}
ahora puede especificar el serializador en la puesta en marcha de este modo:
var productssXmlFormatter = GlobalConfiguration.Configuration.Formatters.XmlFormatter;
productssXmlFormatter.SetSerializer<Products>(new XmlSerializer(typeof(Products)));
Sé que no es el más La forma ideal de tener que especificar el serializador y perder la flexibilidad y conveniencia de EF y Linq. O al menos tener que intervenir en lugar de solo devolver IEnumerable <>.
me tienen que dar crédito a la siguiente dirección como supe por primera vez de esta manera desde el sitio en: http://justthisguy.co.uk/outputting-custom-xml-net-web-api/
Esto dará lugar a la siguiente xml:
<Products nid="0">
<Product id="1" name="Product1" quantity="20"/>
<Product id="2" name="Product2" quantity="37"/>
<Product id="3" name="Product3" quantity="6"/>
<Product id="4" name="Product4" quantity="2"/>
<Product id="5" name="Product5" quantity="50"/>
</Products>
Por favor, no se olvide para mirar el sitio mencionado.
aquí es un hilo similar - http://stackoverflow.com/a/11794647/2152334. Respuesta siempre que pueda mejorarse fácilmente a través de ActionFilters para ser más genérico y declarativo. – Yura