2010-01-24 2 views
8

Я хочу добавить в начало моего XML-файла некоторые заметки для пользователя, который его читает. Я не уверен, как это сделать, хотя с сериализацией xml.Как вставить XML-комментарии в XML-сериализацию?

Я смотрел на этот пост

C# XML Insert comment into XML after xml tag

XDocument document = new XDocument(); 
document.Add(new XComment("Product XY Version 1.0.0.0")); 
using (var writer = document.CreateWriter()) 
{ 
    serializer.WriteObject(writer, graph); 
} 
document.Save(Console.Out); 

, но я не совсем уверен, что происходит и как добавить это к моему коду. В основном у меня есть только некоторые классы, которые я сериализую в xml и вставляю в поток памяти.

Так что я не уверен, в какой момент я должен добавить комментарии.

Благодаря

Код

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Xml.Serialization; 

namespace ConsoleApplication1 
{ 
    [XmlRoot("Course")] 
    public class MyWrapper 
    { 
     public MyWrapper() 
     { 
      TaskList = new List<Tasks>(); 
     } 

     [XmlElement("courseName")] 
     public string CourseName { get; set; } 

     [XmlElement("backgroundColor")] 
     public string BackgroundColor { get; set; } 

     [XmlElement("fontColor")] 
     public string FontColor { get; set; } 

     [XmlElement("sharingKey")] 
     public Guid SharingKey { get; set; } 

     [XmlElement("task")] 
     public List<Tasks> TaskList { get; set; } 

    } 

public class Tasks 
{ 
    [XmlAttribute("type")] 
    public string Type { get; set; } 

    [XmlElement("taskName")] 
    public string TaskName { get; set; } 

    [XmlElement("description")] 
    public string Description { get; set; } 

    [XmlElement("taskDueDate")] 
    public DateTime TaskDueDate { get; set; } 

    [XmlElement("weight")] 
    public decimal? Weight { get; set; } 

    [XmlElement("beforeDueDateNotification")] 
    public int BeforeDueDateNotification { get; set; } 

    [XmlElement("outOf")] 
    public decimal? OutOf { get; set; } 

} 

}

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Xml.Serialization; 
using System.IO; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 

      MyWrapper wrap = new MyWrapper(); 
      wrap.CourseName = "Comp 1510"; 
      wrap.FontColor = "#ffffff"; 
      wrap.BackgroundColor = "#ffffff"; 
      wrap.SharingKey = Guid.NewGuid(); 

      Tasks task = new Tasks() 
      { 
       TaskName = "First Task", 
       Type = "Assignment", 
       TaskDueDate = DateTime.Now, 
       Description = "description", 
       BeforeDueDateNotification = 30, 
       OutOf = 50.4M 
      }; 

      wrap.TaskList.Add(task); 
      var stream = SerializeToXML(wrap); 


     } 

     static public MemoryStream SerializeToXML(MyWrapper list) 
     { 

      XmlSerializer serializer = new XmlSerializer(typeof(MyWrapper)); 
      MemoryStream stream = new MemoryStream(); 
      serializer.Serialize(stream, course); 
      return stream; 


     } 

    } 
} 
+0

Покажите нам свой код :-) – dtb

+0

(Я добавил альтернативное решение ответа, связанного в вопросе.) – dtb

+0

Хорошо, я добавил свой код. Итак, вы можете видеть, что я делаю, и, возможно, где я должен добавить этот код. – chobo2

ответ

17

Просто поместите XmlWriter как промежуточный уровень между MemoryStream и XmlSerializer:

static public MemoryStream SerializeToXML(MyWrapper list) 
{ 
    XmlSerializer serializer = new XmlSerializer(typeof(MyWrapper)); 
    MemoryStream stream = new MemoryStream(); 
    XmlWriter writer = XmlWriter.Create(stream); 
    writer.WriteStartDocument(); 
    writer.WriteComment("Product XY Version 1.0.0.0"); 
    serializer.Serialize(writer, course); 
    writer.WriteEndDocument(); 
    writer.Flush(); 
    return stream; 
} 

Вы можете добавить любой XML до и после сериализованного графа объектов (пока результат будет действительным XML).

+5

Документ не будет отступать/отформатировать по умолчанию. Поэтому вам нужно установить его в конструкторе: XmlWriter.Create (поток, новый XmlWriterSettings {Indent = true}); Или используйте XmlTextWriter: XmlTextWriter writer = XmlTextWriter.Create (stream); writer.Formatting = Formatting.Indented; – row1

Смежные вопросы