12

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

创建List<Product>具有适当 XmlRoot 和 XmlElement 属性的新类不起作用。

添加Datacontract属性不起作用。

添加CollectionDatacontract属性不起作用。

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


尝试使用 XmlSeriazlier 代替:

config.Formatters.XmlFormatter.UseXmlSerializer = true;

然后尝试定义一个派生自 Product 集合的类,并使用 [XmlRoot("Products")] 将元素名称从“ArrayOfProduct”重命名为“Products”。

例如,不使用 List,而是使用类 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 的动作:

    public Products Get()
    {
        return new Products()
        {
            new Product() 
            {
                Id = 1,
                Name = "Tomato Soup", 
                Category = "Groceries",
                Price = 1
            }
        };
    }
4

1 回答 1

16

尝试使用 XmlSeriazlier 代替:

config.Formatters.XmlFormatter.UseXmlSerializer = true;

然后尝试定义一个派生自 Product 集合的类,并使用 [XmlRoot("Products")] 将元素名称从“ArrayOfProduct”重命名为“Products”。

例如,不使用 List,而是使用类 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 的动作:

    public Products Get()
    {
        return new Products()
        {
            new Product() 
            {
                Id = 1,
                Name = "Tomato Soup", 
                Category = "Groceries",
                Price = 1
            }
        };
    }
于 2012-10-24T20:41:01.617 回答