2014-01-29 52 views
0

將我的類序列化爲XML。我的一個類的根元素沒有被正確命名。使用XmlRoot聲明序列化XML問題類

完整的XML結構應該如下所示。

<Workflow> 
    <Name>My Workflow</Name> 
    <Description /> 
    <Modules> 
    <Module Name="Intro" MenuText="IntroText" /> 
    </Modules> 
</Workflow> 

然而即時得到這個結果

<Workflow> 
    <Name>My Workflow</Name> 
    <Description /> 
    <Modules> 
    <WorkflowModule Name="Intro" MenuText="IntroText" /> 
    </Modules> 
</Workflow> 

我想要的元素「WorkflowModule」被稱爲「模塊」,然而問題是,我已經有一個名爲模塊另一個類。所以爲了解決這個問題,我將它稱爲WorkflowModule,並將類XmlRoot()聲明爲這樣;

[XmlRoot("Module")] 
public class WorkflowModule 
{...} 

但是,當我序列化Workflow類它仍然會出現WorkflowModule。

這裏是我的2班課;

[XmlRoot("Workflow")] 
public class Workflow 
{ 

    private string _name; 
    private string _description; 
    private List<WorkflowModule> _modules = new List<WorkflowModule>(); 



    [XmlElement("Name")] 
    public String Name 
    { 
     get { } 
     set { } 
    } 


    [XmlElement("Description")] 
    public String Description 
    { 
     get { } 
     set { } 
    } 


    [XmlArrayItem(typeof(WorkflowModule))] 
    public List<WorkflowModule> Modules 
    { 
     get { } 
     set { } 
    } 
} 








[XmlRoot("Module")] 
public class WorkflowModule 
{ 

    private string _name; 
    private string _menu_text; 


    public WorkflowModule() 
    { 
    } 


    [XmlAttribute("Name")] 
    public String Name 
    { 
     get { } 
     set { } 

    } 


    [XmlAttribute("MenuText")] 
    public String MenuText 
    { 
     get { } 
     set { } 

    } 

} 

}

+0

XML文檔只能有一個根 – Grundy

+0

所以在這裏我定義XmlRoot()用於WorkflowModule類是有沒有辦法序列化爲一個名字嗎? – IEnumerable

回答

2

設置XmlArrayItem attrubute中的元素名稱:

[XmlArrayItem(typeof(WorkflowModule), ElementName = "Module")] 
+0

這工作馬上。謝謝 – IEnumerable

1

有很多方法來控制它在這個副本後How do I Set XmlArrayItem Element name for a List<Custom> implementation?

這些屬性控制的定義,從連載該對象的透視圖,它橫跨嵌套對象

[XmlArray("RootArrayElementNameGoesHere")] 
[XmlArrayItem(typeof(Workflow), ElementName="ArrayItemElementNameGoesHere")] 
public List<WorkflowModule> Modules 

該屬性重新確定該元素的名稱,但可以與本地[XmlArrayItem]或[的XmlElement]屬性從所屬提供本地覆蓋對象序列

[XmlType(TypeName = "UseThisElementNameInsteadOfClassName")] 
public class WorkflowModule 

該屬性僅授予被覆蓋時,其在直接對象被序列

[XmlRoot("UseThisElementNameWhenItIsTheRoot")] 
public class WorkflowModule