2010-09-01 67 views
3

目标连载:更改根节点的名称不改变类名

以一个名为“项”和输出的序列化XML作为类:

<Template><!--some properties --></Template> 

问题

根节点派生于正在实现IXmlSerializable的类名称之外。

// By the time I get here 'writer' already has a root node 
    public void WriteXml(XmlWriter writer) 
    { 
     writer.WriteStartElement("Template"); 
     // write out the properties 
     writer.WriteEndElement(); 
    } 

所以我风与XML,看起来像

<Item><Template><!-- some properties --></Template></Item> 

问题

有一个属性,我可以覆盖一个属性,或任何让我想要的效果(除从改变类名)?

谢谢!

感谢Frederik的解析!

由于这个问题在@Frederik Gheysels的回答中有所回答,我以为我会把它放在这里,所以它不会被埋没。

只需将XmlRoot属性添加到您的类中,这将更改根节点的输出xml。

实施例:

[XmlRoot("Template")] 
public class Item : IXmlSerializable 
{ 
    //Item's properties 
} 
+0

请显示序列化代码并显示Item类的位置。它是其他类的成员吗? – 2010-09-01 17:05:19

+0

我想你想XML Type属性 http://msdn.microsoft.com/en-us/library/2baksw0z(VS.71).aspx – asawyer 2010-09-01 17:08:13

+0

@John Saunders:项目不是另一个类的成员。我正在使用内置的.Net XmlSerializer。 – 2010-09-01 17:37:34

回答

6

检查XmlRootAttribute类。

+0

太棒了。你的回答帮我找到了'XmlRoot'属性。通过在我的类声明'public class Item:IXmlSerializable'上面添加'[XmlRoot(“Template”)]]。我能够得到理想的效果。 – 2010-09-01 17:11:11