2010-01-24 68 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 2010-01-24 23:43:21

+0

(我在問題中添加了一個替代解決方案,以解答相關問題。) – dtb 2010-01-24 23:53:09

+0

好的,我添加了我的代碼。所以你可以看到我在做什麼,也可能在哪裏添加代碼。 – chobo2 2010-01-25 00:04:40

回答

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(stream,new XmlWriterSettings {Indent = true}); 或使用XmlTextWriter: XmlTextWriter writer = XmlTextWriter.Create(stream); writer.Formatting = Formatting.Indented; – row1 2011-07-28 08:16:02