5

在 Framework 4.0 中使用 Web API 只需要 XML 输出,因此从格式化程序集合中删除了 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>

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

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

4

1 回答 1

7

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

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

config.Formatters.XmlFormatter.UseXmlSerializer = true;

然后,您可以将 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;
}

有关更多信息,您可以参考这篇 MSDN 文章: 使用属性控制 XML 序列化

于 2012-10-24T20:19:17.640 回答