直接上代码:
public static class XmlSerializer
{
public static void SaveToXml(string filePath, object sourceObj, Type type)
{
if (!string.IsNullOrWhiteSpace(filePath) && sourceObj != null)
{
type = type != null ? type : sourceObj.GetType();
using (StreamWriter writer = new StreamWriter(filePath))
{
System.Xml.Serialization.XmlSerializer xmlSerializer = new System.Xml.Serialization.XmlSerializer(type);
XmlSerializerNamespaces nameSpace = new XmlSerializerNamespaces();
nameSpace.Add("", ""); //not ot output the default namespace
xmlSerializer.Serialize(writer, sourceObj, nameSpace);
}
}
}
public static object LoadFromXml(string filePath, Type type)
{
object result = null;
if (File.Exists(filePath))
{
using (StreamReader reader = new StreamReader(filePath))
{
System.Xml.Serialization.XmlSerializer xmlSerializer = new System.Xml.Serialization.XmlSerializer(type);
result = xmlSerializer.Deserialize(reader);
}
}
return result;
}
模型类,要序列化的数据结构:
//[XmlRoot("sequence")]
public class Sequence
{
//[XmlAttribute("id")]
public string Id { get; set; }
// [XmlElement("media")]
public Media Media { get; set; }
public Sequence()
{
Id = "序列2";
Media = new Media();
}
}
//[XmlRoot("media")]
public class Media
{
// [XmlAttribute("id")]
public string Id { get; set; }
//[XmlElement("video")]
public Video Video { get; set; }
// [XmlElement("audio")]
public Audio Audio { get; set; }
public Media()
{
Id = "media one";
Video = new Video();
Audio = new Audio();
}
}
public class Video
{
public string name { get; set; }
public Video()
{
name = "video 12";
}
}
public class Audio
{
public string name { get; set; }
public Audio()
{
name = "video 12";
}
}
实际使用:
class Program
{
static void Main(string[] args)
{
Sequence model = new Sequence();
XmlSerializer.SaveToXml("text.xml", model, model.GetType());
}
}
结果:
<?xml version="1.0" encoding="utf-8"?>
<Sequence>
<Id>序列2</Id>
<Media>
<Id>media one</Id>
<Video>
<name>video 12</name>
</Video>
<Audio>
<name>video 12</name>
</Audio>
</Media>
</Sequence>