so che non siete appassionati l'idea involucro ma c'è una soluzione che utilizza un po 'un wrapper ma usa anche gli attributi xml che sono molto facili da usare. Il mio rifiuto di utilizzare il seguente approccio è l'uso del vecchio serializzatore.
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; }
}
Ora il controller può semplicemente tornare Prodotti come:
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},
}
};
}
ora è possibile specificare il serializzatore in fase di start-up in questo modo:
var productssXmlFormatter = GlobalConfiguration.Configuration.Formatters.XmlFormatter;
productssXmlFormatter.SetSerializer<Products>(new XmlSerializer(typeof(Products)));
So che non è il più modo ideale per dover specificare il serializzatore e perdere la flessibilità e la convenienza di EF e Linq. O almeno dover intervenire invece di restituire IEnumerable <>.
devo dare credito al seguente sito come ho imparato in questo modo dal sito all'indirizzo: http://justthisguy.co.uk/outputting-custom-xml-net-web-api/
Ciò comporterà il seguente codice 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>
non dimenticate per guardare il sito elencato.
qui è thread simile - http://stackoverflow.com/a/11794647/2152334. La risposta fornita può essere facilmente migliorata tramite ActionFilters per essere più generica e dichiarativa. – Yura