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。
你需要一个根以拥有有效的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);
}
}
对不起,我把根部拔掉了。这正是我要找的,谢谢,我感谢你的帮助! – 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的代码? – mlsteeves 2011-03-22 14:11:54
问题是?显示目前为止的代码并描述问题。 – 2011-03-22 14:12:29