【问题标题】:Custom XML output?自定义 XML 输出?
【发布时间】:2012-10-25 08:22:05
【问题描述】:

在 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”节点上方添加更多节点(带有额外信息)。

有没有简单的方法来做到这一点?还是我必须编写自定义格式化程序/序列化程序?

【问题讨论】:

  • 这不可能吗?还是我错过了一些明显的东西?还是它太新了,还没有人知道解决方案?有一种方法可以自定义默认输出。

标签: xml asp.net-mvc asp.net-mvc-4 asp.net-web-api xmlserializer


【解决方案1】:

我想更改“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 文章:Controlling XML Serialization Using Attributes

【讨论】:

  • 谢谢,玛吉。我已经切换到 XMLSerializer。刚刚找到了一个例子来做到这一点。但是感谢您的回复!
猜你喜欢
  • 2016-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-24
  • 2011-04-30
  • 1970-01-01
  • 1970-01-01
  • 2011-08-10
相关资源
最近更新 更多