自定义XML输出?

use*_*591 5 xml asp.net-mvc xmlserializer asp.net-mvc-4 asp.net-web-api

使用Framework 4.0 Wanted XML only输出Web API,因此从formatters集合中删除了JSON格式化程序.现在,我想修改XMLSerializer输出的标准XML:

<?xml version="1.0"?>
-<ArrayOfCategory xmlns:xsd="http://www.w3.org/2001/XMLSchema"     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">-
  <Category>
    <Id>1</Id>
    <Name>Drink</Name>
  </Category>-
  <Category>
    <Id>2</Id>
    <Name>Snack</Name>
  </Category>
</ArrayOfCategory>
Run Code Online (Sandbox Code Playgroud)

我想更改"Arrayof"节点以说出更有意义的节点,并且需要在"Arrayof"节点上方添加更多节点(带有额外信息).

是否有捷径可寻?或者我是否必须编写自定义格式化程序/ seralizer?

Mag*_*ing 7

我想更改"Arrayof"节点以说出更有意义的节点,并且需要在"Arrayof"节点上方添加更多节点(带有额外信息).

如果您想要对XML进行这种自定义,则应使用XmlSerializer而不是XmlFormatter中默认使用的DataContractSerializer.

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

然后,您可以将Category的集合包装到类中,并使用[XmlRoot],[XmlElement]和[XmlArray]来自定义元素名称.这是一个例子:

[XmlRoot(ElementName = "node")]
public class Node
{
    [XmlElement(ElementName= "SomeInfo")]
    public string Node1;

    [XmlElement(ElementName = "OtherInfo")]
    public string Node2;

    [XmlArray("Categories")]
    public List<Category> CatList;
}
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅此MSDN文章: 使用属性控制XML序列化.