xml 序列化和反序列化

xml 格式如下:

<?xml version="1.0" encoding="utf-8" ?>
<Persons>
    <Person Name="张三" Sex="男" Age="18" Height ="180" ></Person>
    <Person Name="李四" Sex="男" Age="21" Height ="170" ></Person>
    <Person Name="王五" Sex="女" Age="12" Height ="120" ></Person>
    <Person Name="赵六" Sex="男" Age="58" Height ="160" >
        <Children>
            <Child Name="孩子一" Sex="2"></Child>
            <Child Name="孩子二" Sex="5"></Child>
        </Children>
    </Person>
</Persons>

为了方便起见,以下略去读取xml文件以及写入生产xml文件,直接将以上xml文件写在cs文件中。

namespace XML序列化
{

    class MyXmlOptions
    {
        public Persons per { get; set; }
        public string xmlString { get; set; }
        public MyXmlOptions()
        {
            //读取本地 xml 文件内容
            xmlString = "<?xml version=\"1.0\" encoding=\"utf-8\" ?>"
    + "<Persons>"
    + "    <Person Name=\"张三\" Sex=\"男\" Age=\"18\" Height =\"180\" ></Person> "
    + "    <Person Name=\"李四\" Sex=\"男\" Age=\"21\" Height =\"170\" ></Person> "
    + "    <Person Name=\"王五\" Sex=\"女\" Age=\"12\" Height =\"120\" ></Person> "
    + "    <Person Name=\"赵六\" Sex=\"男\" Age=\"58\" Height =\"160\" > "
    + "        <Children>"
    + "            <Child Name=\"孩子一\" Sex=\"2\"></Child>"
    + "            <Child Name=\"孩子二\" Sex=\"5\"></Child>"
    + "        </Children>"
    + "    </Person>"
    + "</Persons>";

        }

        public string XmlDeserialize()
        {
            if (per != null)
            {
                StringBuilder sb = new StringBuilder(5000);
                XmlSerializer ser = new XmlSerializer(typeof(Persons));
                using (TextWriter writer = new StringWriter(sb))
                {
                    ser.Serialize(writer, per);
                    return writer.ToString();
                }
            }
            else
            {
                return "实体对象不存在,饭序列化失败";
            }
        }
        public void XmlSerialize()
        {
            XmlSerializer ser = new XmlSerializer(typeof(Persons));
            using (TextReader reader = new StringReader(xmlString))
            {
                per = (Persons)ser.Deserialize(reader);
            }
        }
    }
}

客户端代码如下:

 static void Main(string[] args)
        {
            MyXmlOptions option = new MyXmlOptions();
            option.XmlSerialize();
            Console.WriteLine(option.xmlString);
            Console.WriteLine(option.XmlDeserialize());

            Console.ReadKey();
        }

 为了使 xml 能够序列化为 实体对象,并且可以反序列化,Poersons 实体 根据xml结构设置如下:

namespace XML序列化
{
    [XmlRoot("Persons", IsNullable = false)]
    public class Persons
    {
        [XmlElement("Person")]
        public List<Person> Person;
    }
    public class Person
    {
        [XmlAttribute("Name")]
        public string Name { get; set; }
        [XmlAttribute("Sex")]
        public string Sex { get; set; }
        [XmlAttribute("Age")]
        public string Age { get; set; }
        [XmlAttribute("Height")]
        public string Height { get; set; }
        [XmlElement("Children")]
        public Children Children;
    }
    public class Children
    {
        [XmlElement("Child")]
        public List<Child> Child;
    }
    public class Child
    {
        [XmlAttribute("Name")]
        public string Name { get; set; }
        [XmlAttribute("Sex")]
        public string Sex { get; set; }
    }
}

 

posted @ 2013-04-12 13:41  西安-DB  阅读(294)  评论(0编辑  收藏  举报