Remove <ArrayOf. From MVC Web Api response
asp.net-mvc, asp.net-mvc-4, asp.net-web-api, xml
Solution
Try using the XmlSeriazlier instead:
config.Formatters.XmlFormatter.UseXmlSerializer = true;
And then try defining a class that derives from the collection of Product, and use [XmlRoot("Products")] to rename the element name from 'ArrayOfProduct' to 'Products'.
For example, instead of using List, use the class Products:
[XmlRoot("Products")]
public class Products : List<Product> { }
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public string Category { get; set; }
public double Price { get; set; }
}
ApiController's action:
public Products Get()
{
return new Products()
{
new Product()
{
Id = 1,
Name = "Tomato Soup",
Category = "Groceries",
Price = 1
}
};
}
Problem
I am getting the following response from a standard MVC 4 WebApi project; ``` <ArrayOfProduct xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <Product> <Id>1</Id> <Name>Tomato Soup</Name> <Category>Groceries</Category> <Price>1</Price> </Product> </ArrayOfProduct> ``` I am trying to make it so that it returns ``` <Products> <Product> <Id>1</Id> <Name>Tomato Soup</Name> <Category>Groceries</Category> <Price>1</Price> </Product> </Products> ``` I have found many reference to various methods that supposedly solve this, none work; Changing the default serializer does not work. Creating a customer serializer for `Product` does not work. Creating a new class that has `List<Product>` exposed with suitable XmlRoot and XmlElement attributes does not work. Adding `Datacontract` attributes does not work. Adding `CollectionDatacontract` attributes does not work. This appears to be so simple to everyone else, except me!