Ich weiß, dass Sie nicht gern die Wrapper-Idee, aber es gibt eine Lösung, die etwas ein Wrapper verwendet verwendet aber auch die XML-Attribute, mit denen sehr einfach zu arbeiten ist. Meine Weigerung, den folgenden Ansatz zu verwenden, ist die Verwendung des alten Serialisierers.
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; }
}
Jetzt Ihr Controller kann nur Produkte zurückgeben wie:
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},
}
};
}
jetzt können Sie den Serializer in Start-up angeben wie folgt:
var productssXmlFormatter = GlobalConfiguration.Configuration.Formatters.XmlFormatter;
productssXmlFormatter.SetSerializer<Products>(new XmlSerializer(typeof(Products)));
Ich weiß, es ist nicht die Der ideale Weg, um den Serializer zu spezifizieren und die Flexibilität und den Komfort von EF und Linq zu verlieren. Oder zumindest eingreifen müssen statt nur IEnumerable zurückgeben <>. Dies führt in der folgenden XML-http://justthisguy.co.uk/outputting-custom-xml-net-web-api/
:
Ich habe Kredit auf der folgenden Website zu geben, wie ich das erste dieser Art und Weise von der Website auf gelernt
<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>
Bitte vergessen Sie nicht, um die gelistete Seite zu sehen.
Hier ist ein ähnlicher Thread - http://Stackoverflow.com/a/11794647/2152334. Die angegebene Antwort kann über ActionFilters leicht verbessert werden, um generischer und deklarativer zu sein. – Yura