xml的序列化跟反序列化

xml的序列化和反序列化

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;
        }
    }