去掉

时间:2012-10-24 19:41:32

标签: xml asp.net-mvc asp.net-mvc-4 asp.net-web-api

我从标准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属性不起作用。

对于其他人来说,这似乎很简单,除了我!

1 个答案:

答案 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
            }
        };
    }