xml的序列化和反序列化简单例子如下:
[XmlRoot("Person")]
public class Person
{
[XmlElement("Name")]
public string Name;
[XmlElement("Age")]
public int Age;
}
class Program
{
static void Main(string[] args)
{
Person p = new Person();
p.Name = "Stacey"; p.Age = 30;
XmlSerializer xs = new XmlSerializer(typeof(Person));
using (Stream s = File.Create("person.xml"))
xs.Serialize(s, p);
Person p2;
using (Stream s = File.OpenRead("person.xml"))
p2 = (Person)xs.Deserialize(s);
Console.WriteLine(p2.Name + " " + p2.Age); // Stacey 30
}
}
两个模板:
序列化
class XmlStreamSerializer<T>
{
public Stream Serialize(T model)
{
MemoryStream stream = new MemoryStream();
XmlSerializer serializer = new XmlSerializer(typeof(T));
serializer.Serialize(stream, model);
stream.Position = 0;
return stream;
}
}
反序列化:
class XmlStreamDeserializer<T>
{
public T Deserialize(Stream xml)
{
T model;
Stream xmlStream = xml;
try
{
XmlSerializer serializer = new XmlSerializer(typeof(T));
model = (T)serializer.Deserialize(xml);
}
catch (XmlException ex)
{
throw new ResponseDeserializationException(ex.Message, ex);
}
catch (InvalidOperationException ex)
{
throw new ResponseDeserializationException(ex.Message, ex);
}
finally
{
if (xmlStream != null)
{
xmlStream.Dispose();
}
}
return model;
}
}