Сохранить несколько элементов в XML с сериализацией - PullRequest
0 голосов
/ 17 февраля 2012

Я сохраняю объект в xml-файле с сериализацией следующим образом:

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

, но с помощью этого кода я могу просто ввести один элемент в мой xml-файл, и он будет перезаписан, если я вставлю новый элемент вit.how, я могу ввести многократный пункт в своем файле? Sholud, я Использую Список Для этого?

Ответы [ 3 ]

2 голосов
/ 17 февраля 2012

Я делаю это довольно часто. Я обычно использую класс верхнего уровня, который инкапсулирует свойство коллекции в качестве члена и имеет отношение один к одному с файлом 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 голос
/ 17 февраля 2012

Если вы хотите сериализовать несколько элементов в файл, используйте структуру данных List<T>.

Обратите внимание, что тип (класс), который представляет T, должен быть помечен [XmlRoot] как атрибут класса или реализован IXmlSerializable.

0 голосов
/ 17 февраля 2012

Вы можете создать объект типа List, а затем добавить столько имен объектов, сколько захотите.Затем передайте этот список для сериализации.

...