删除<ArrayOf.来自MVC Web Api的回复

Chr*_*int 12 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>
Run Code Online (Sandbox Code Playgroud)

我试图让它返回

<Products>
<Product>
<Id>1</Id>
<Name>Tomato Soup</Name>
<Category>Groceries</Category>
<Price>1</Price>
</Product>
</Products>
Run Code Online (Sandbox Code Playgroud)

我发现许多参考各种方法可以解决这个问题,没有工作;

更改默认序列化程序不起作用.

创建客户序列化程序Product不起作用.

创建List<Product>使用适当的XmlRoot和XmlElement属性公开的新类不起作用.

添加Datacontract属性不起作用.

添加CollectionDatacontract属性不起作用.

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

Mag*_*ing 15

请尝试使用XmlSeriazlier:

config.Formatters.XmlFormatter.UseXmlSerializer = true;
Run Code Online (Sandbox Code Playgroud)

然后尝试定义一个派生自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; }
}
Run Code Online (Sandbox Code Playgroud)

ApiController的动作:

    public Products Get()
    {
        return new Products()
        {
            new Product() 
            {
                Id = 1,
                Name = "Tomato Soup", 
                Category = "Groceries",
                Price = 1
            }
        };
    }
Run Code Online (Sandbox Code Playgroud)

  • 效果很好,仍在努力删除xmlns.xmlns:xsd ="http://www.w3.org/2001/XMLSchema"xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance"任何想法?我尝试了[XmlRoot("Orders",Namespace = null)]无法正常工作 (2认同)