2012-02-17 23 views
0

我保存onject到一個XML文件序列化這樣的:保存多個項目在XML中採用序列化

 FileStream stream = new FileStream(tempFilename,FileMode.Create); 
     XmlSerializer serializer = new XmlSerializer(newType); 
     serializer.Serialize(stream,objectname); 

但與此代碼我可以在我的xml文件只需輸入一個項目,這將是覆蓋如果我在其中插入新項目。我可以在我的文件中輸入多個項目嗎?Sholud我使用列表爲它?

+1

不知道最終目標很難回答。這是因爲如果您將多個對象序列化爲一個文件並且彼此相鄰,那麼將創建的文檔將不會是有效的Xml文檔,因爲它將具有多個根元素。請注意,這是一個有效的場景,但我不確定這是否是您想要的。 – Pawel 2012-02-17 17:59:20

回答

2

我經常這樣做。我通常使用頂級類來封裝集合屬性作爲成員,並且與xml文件具有一對一的關係。該類的成員可以是集合或簡單的屬性等

這裏是有自定義對象的集合的代碼片段:

[System.SerializableAttribute()] 
[System.Xml.Serialization.XmlRootAttribute(ElementName = "DeployRuns", Namespace = "", IsNullable = false)] 
public class DeployRuns : List<RunDetail> 
{ 

,然後如果你想封裝在另一個類中您的收藏這將序列化,看到這個類的底部性質:

[System.SerializableAttribute()] 
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)] 
public class DeployDetails 
{ 
    public DeployDetails() 
    { 
     this.DeployRuns = new DeployRuns(); 
    } 

    [System.Xml.Serialization.XmlAttributeAttribute("sourcePath")] 
    public string SourcePath { get; set; } 

    [System.Xml.Serialization.XmlAttributeAttribute("archiveDestinationPath")] 
    public string ArchiveDestinationPath { get; set; } 

    [System.Xml.Serialization.XmlAttributeAttribute("databaseDestinationPath")] 
    public string DatabaseDestinationPath { get; set; } 

    public DeployRuns DeployRuns { get; set; } 
} 

而且玩完了代碼示例,這是我這個層次結構的頂層類:

[System.SerializableAttribute()] 
[System.Xml.Serialization.XmlRootAttribute(ElementName = "ExecutionHistory", Namespace = "", IsNullable = false)] 
public class ExecutionHistory 
{ 
    public ExecutionHistory() 
    { 
     this.CaptureDetails = new CaptureDetails(); 
     this.DeployDetails = new DeployDetails(); 
    } 

    [XmlElementAttribute("CaptureDetails", Form = System.Xml.Schema.XmlSchemaForm.Unqualified)] 
    public CaptureDetails CaptureDetails { get; set; } 

    [XmlElementAttribute("DeployDetails", Form = System.Xml.Schema.XmlSchemaForm.Unqualified)] 
    public DeployDetails DeployDetails { get; set; } 
0

您可以創建一個List類型的對象,然後根據需要添加儘可能多的'objectname'。然後通過該列表進行序列化。

1

如果要將多個項目序列化到一個文件,則使用List<T>數據結構。

請注意,T表示的類型(類)必須標記爲[XmlRoot]作爲類屬性或實施IXmlSerializable