我从标准MVC 4 WebApi项目获得以下响应;
<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>
我试图让它返回
<Products>
<Product>
<Id>1</Id>
<Name>Tomato Soup</Name>
<Category>Groceries</Category>
<Price>1</Price>
</Product>
</Products>
我发现很多参考各种方法可以解决这个问题,没有工作;
更改默认序列化程序不起作用。
为Product
创建客户序列化程序不起作用。
创建一个使用适当的XmlRoot和XmlElement属性公开List<Product>
的新类不起作用。
添加Datacontract
属性不起作用。
添加CollectionDatacontract
属性不起作用。
对于其他人来说,这似乎很简单,除了我!
答案 0 :(得分:15)
请尝试使用XmlSeriazlier:
config.Formatters.XmlFormatter.UseXmlSerializer = true;
然后尝试定义一个派生自Product集合的类,并使用[XmlRoot(“Products”)]将元素名称从'ArrayOfProduct'重命名为'Products'。
例如,使用类Products:
而不是使用List[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的行动:
public Products Get()
{
return new Products()
{
new Product()
{
Id = 1,
Name = "Tomato Soup",
Category = "Groceries",
Price = 1
}
};
}