问题 删除


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

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


1631
2017-10-24 19:41


起源

您是否尝试过使用该设置? 在这个问题和答案中显示。另外,您使用的是Web API的发行版吗? - Sixto Saez
是的,尝试过,是的,它是发布版本。 - ChrisBint


答案:


请尝试使用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
            }
        };
    }

14
2017-10-24 20:41



你好。有没有办法达到你所做的,但也改变了 Product xml元素到别的什么?我找不到在类上设置正确属性来更改名称的方法...... - Tallmaris
2Tallmaris:使用[DataContract]属性来修饰类或/和属性 - Romko
什么是 config 在你的代码?你的意思是 GlobalConfiguration.Configuration.Formatters.XmlFormatter.UseXmlSerializer = true; ? - Patrick Szalapski
config 是传递给方法的参数 Register(HttpConfiguration config) 在 App_Start/WebApiConfig。 - Genti Saliu
效果很好,仍在努力删除xmlns。的xmlns:XSD =”w3.org/2001/XMLSchema”;的xmlns:的xsi =”w3.org/2001/XMLSchema-instance”;任何想法?我尝试了[XmlRoot(“Orders”,Namespace = null)]但没有用 - Shahdat