2010-01-24 12 views
8

Xml dosyamın en üstünde, onu okuyan kullanıcı için bazı notlar eklemek istiyorum. Xml serileştirme ile bunu nasıl yapacağından emin değilim. Bu yazıXML Serileştirme'ye XML yorumları nasıl eklenir?

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); 

bakıyordu ama oluyor ve nasıl benim koduna bu eklemek için ne gerçekten emin değilim

. Temel olarak sadece xml'ye serileştirdiğim ve bir bellek akışına yapıştıracağım bazı sınıflarım var.

Dolayısıyla, hangi noktada yorum eklemeliyim diye emin değilim.

Teşekkür

Kod

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

Bize kodunuzu göster :-) – dtb

+0

(Bu soruya bağlantılı soruya bir alternatif çözüm daha eklediniz.) – dtb

+0

Ok Kodumu ekledim. Yani ne yaptığımı ve muhtemelen bu kodu eklemem gereken yeri görebilirsiniz. – chobo2

cevap

17

Sadece MemoryStream ve XmlSerializer arasında bir ara seviye olarak bir XmlWriter koydu:

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; 
} 

Dizininizden önce ve sonra herhangi bir XML ekleyebilirsiniz (sonuç geçerli XML olduğu sürece).

+5

Belge varsayılan olarak girintili/formatlanmayacak. Bu yüzden kurucuda ayarlamanız gerekir: XmlWriter.Create (yeni XmlWriterSettings {Indent = true}); Veya bir XmlTextWriter kullanın: XmlTextWriter writer = XmlTextWriter.Create (akış); writer.Formatting = Formatting.Indented; – row1