2011-03-22 115 views
3

我想序列化這樣的事情,那裏是一個頭和身體。C#XML序列化

第一部分「galleryData」是標題 第二部分是「爲imageData」 - 在畫廊重複每個圖像

<galleryData> 
    <title>some title</title> 
    <uuid>32432322</uuid> 
    <imagepath>some path</imagepath> 
</galleryData> 

<imageData> 
    <title>title one</title> 
    <category>nature</category> 
    <description>blah blah</description> 
</imageData> 

<imageData> 
    <title>title two</title> 
    <category>nature</category> 
    <description>blah blah</description> 
</imageData> 

<imageData> 
    <title>title three</title> 
    <category>nature</category> 
    <description>blah blah</description> 
</imageData> 

我看怎麼做,如果我並不需要一個標題區。我目前只是用xmlwriter來創建它,但我想將對象序列化爲xml。

+0

你能粘貼你用來生成上面的XML的代碼? – mlsteeves 2011-03-22 14:11:54

+0

問題是?顯示目前爲止的代碼並描述問題。 – 2011-03-22 14:12:29

回答

6

你需要一個根以擁有有效的XML。這裏是你的模式如何看起來像一個例子:

public class ImageData 
{ 
    [XmlElement("title")] 
    public string Title { get; set; } 
    [XmlElement("category")] 
    public string Category { get; set; } 
    [XmlElement("description")] 
    public string Description { get; set; } 
} 

public class GalleryData 
{ 
    [XmlElement("title")] 
    public string Title { get; set; } 
    [XmlElement("uuid")] 
    public string UUID { get; set; } 
    [XmlElement("imagepath")] 
    public string ImagePath { get; set; } 
} 

public class MyData 
{ 
    [XmlElement("galleryData")] 
    public GalleryData GalleryData { get; set; } 

    [XmlElement("imageData")] 
    public ImageData[] ImageDatas { get; set; } 
} 

,然後簡單地創建這個模型的實例,並將其序列化到一個流:

class Program 
{ 
    static void Main() 
    { 
     var myData = new MyData 
     { 
      GalleryData = new GalleryData 
      { 
       Title = "some title", 
       UUID = "32432322", 
       ImagePath = "some path" 
      }, 
      ImageDatas = new[] 
      { 
       new ImageData 
       { 
        Title = "title one", 
        Category = "nature", 
        Description = "blah blah" 
       }, 
       new ImageData 
       { 
        Title = "title two", 
        Category = "nature", 
        Description = "blah blah" 
       }, 
      } 
     }; 

     var serializer = new XmlSerializer(myData.GetType()); 
     serializer.Serialize(Console.Out, myData); 
    } 
} 
+0

對不起,我把根部拔掉了。這正是我要找的,謝謝,我感謝你的幫助! – mottai 2011-03-22 14:43:08

1

考慮的方式,XML序列化的作品,我不相信你正在尋找的結構將有可能從直接對象 - > XML結構,你的榜樣,你有一個以上的根節點。

如果你有一些東西,那裏有一個容器節點,然後在其中個別的ImageData要素,或單個過拱元素捆綁在一起,你也許可以用它獲得通過。

0

如果您正在使用XmlSerialization,您將需要一個根元素 - 這將是你的序列化類。

你galleryData併爲imageData將用於根元素的類內的對象的實例變量。

0

您可以爲標題創建一個對象具有屬性的標記與XmlSerializabe和添加型表的字段,以便序列化是非標準XML將其序列作爲頭部的子元素

0

您可以使用類似下面的序列化.NET對象到XML字符串:

protected string ObjectToXml<T>(T obj) 
    { 
     var sw = new StringWriter(); 

     try 
     { 
      var mySerializer = new XmlSerializer(typeof(T)); 
      mySerializer.Serialize(sw, obj); 
     } 
     catch (Exception ex) 
     { 
      // Error logging here 
     } 

     return sw.ToString(); 
    } 

您將需要一個根元素的XML文檔,如果您當前的類型不匹配所需的序列化形式,然後創建並popul吃一個適當的數據傳輸對象來完成序列化工作。

0

您顯示的結構不是有效的XML,因爲它包含多個根節點,因此您可以忘記XmlSerializer。如果你想用這種XML類似的結構很容易處理,我建議Html Agility Pack