Подтвердить что ты не робот

Удалите <ArrayOf. Из ответа MVC Web Api

Я получаю следующий ответ от стандартного проекта MVA 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 не работает.

Это кажется таким простым для всех, кроме меня!

4b9b3361

Ответ 1

Попробуйте вместо этого использовать XmlSeriazlier:

config.Formatters.XmlFormatter.UseXmlSerializer = true;

Затем попробуйте определить класс, полученный из коллекции Product, и используйте [XmlRoot ( "Продукты" )], чтобы переименовать имя элемента из "ArrayOfProduct" в "Продукты".

Например, вместо использования 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
            }
        };
    }