我将onject保存到xml文件中,序列化如下:
FileStream stream = new FileStream(tempFilename,FileMode.Create);
XmlSerializer serializer = new XmlSerializer(newType);
serializer.Serialize(stream,objectname);
但是使用这个代码,我可以在我的xml文件中输入一个项目,如果我在其中插入新项目,它将被覆盖。我可以在我的文件中输入多个项目吗?Sholud我使用列表吗?
答案 0 :(得分:2)
我经常这样做。我通常使用顶级类将集合属性封装为成员,并与xml文件具有一对一的关系。该类的成员可以是集合或简单属性等。
以下是包含自定义对象集合的代码段:
[System.SerializableAttribute()]
[System.Xml.Serialization.XmlRootAttribute(ElementName = "DeployRuns", Namespace = "", IsNullable = false)]
public class DeployRuns : List<RunDetail>
{
然后,如果您想将您的集合封装在另一个将被序列化的类中,请参阅此类的bottom属性:
[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; }
答案 1 :(得分:1)
如果要将多个项目序列化为文件,请使用List<T>
数据结构。
请注意T
所代表的类型(类)必须标记为[XmlRoot]
作为类属性或实现IXmlSerializable
。
答案 2 :(得分:0)
您可以创建List类型的对象,然后根据需要添加任意数量的“objectname”。然后将该List传递给序列化。