wiem, że nie lubią idei otoki ale nie jest to rozwiązanie, które w pewnym stopniu wykorzystuje owijkę ale także używa atrybutów xml, które są bardzo łatwe w obsłudze. Moja odmowa zastosowania poniższego podejścia polega na użyciu starego serializera.
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; }
}
Teraz kontroler może po prostu wrócić produktów, takich jak:
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},
}
};
}
teraz można określić serializatora w rozruchu tak:
var productssXmlFormatter = GlobalConfiguration.Configuration.Formatters.XmlFormatter;
productssXmlFormatter.SetSerializer<Products>(new XmlSerializer(typeof(Products)));
wiem, że to nie jest najbardziej Idealny sposób na określenie serializera i utratę elastyczności i wygody EF i Linq. Albo przynajmniej trzeba interweniować, a nie tylko zwracać IEnumerable <>.
muszę dać kredytu na poniższej stronie, jak po raz pierwszy dowiedział się o tej drodze z witryny pod adresem: http://justthisguy.co.uk/outputting-custom-xml-net-web-api/
Spowoduje to w następujący 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>
Proszę nie zapomnieć aby przejrzeć wymienioną witrynę.
Tutaj jest podobny wątek - http://stackoverflow.com/a/11794647/2152334. Odpowiedź pod warunkiem, że można ją łatwo poprawić za pomocą ActionFilters, aby była bardziej ogólna i deklaratywna. – Yura