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 @   西安-DB  阅读(303)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
历史上的今天:
2010-04-12 我比较挫.现在才发现GridView 可以像DataList 一样使用自定义模板
点击右上角即可分享
微信分享提示