C#XML序列化

问题描述:

我想序列化这样的事情,那里是一个头和身体。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

你需要一个根以拥有有效的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

考虑的方式,XML序列化的作品,我不相信你正在寻找的结构将有可能从直接对象 - > XML结构,你的榜样,你有一个以上的根节点。

如果你有一些东西,那里有一个容器节点,然后在其中个别的ImageData要素,或单个过拱元素捆绑在一起,你也许可以用它获得通过。

如果您正在使用XmlSerialization,您将需要一个根元素 - 这将是你的序列化类。

你galleryData并为imageData将用于根元素的类内的对象的实例变量。

您可以为标题创建一个对象具有属性的标记与XmlSerializabe和添加型表的字段,以便序列化是非标准XML将其序列作为头部的子元素

您可以使用类似下面的序列化.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吃一个适当的数据传输对象来完成序列化工作。

您显示的结构不是有效的XML,因为它包含多个根节点,因此您可以忘记XmlSerializer。如果你想用这种XML类似的结构很容易处理,我建议Html Agility Pack