5

使用带有Framework 4.0的Web API进行游玩 仅限希望的XML输出,因此从格式化程序集合中删除了JSON格式程序。 现在,我想修改标准的XML 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”节点上方。

有没有简单的方法来做到这一点?还是必须写一个自定义格式化器/ seralizer?

+0

这仅仅是不可能的吗?还是我错过了明显的东西?还是这么新,没有人知道解决方案呢? GOT是定制默认输出的一种方式。 – user1771591

回答

7

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

如果你想这种你的XML定制的,你应该使用XmlSerializer的而不是在情况下,XMLFormatter默认使用的的DataContractSerializer的。

config.Formatters.XmlFormatter.UseXmlSerializer = true; 

然后,你可以用你的分类收集成一个类,并使用[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

+0

谢谢,玛姬。我已经切换到XMLSerializer。刚才找到了一个例子来做到这一点。但谢谢你的回应! – user1771591