对象与XML,序列化与反序列化

本文介绍如何使用XmlSerializer将C#中的对象实例序列化为XML文件,并将其反序列化回对象实例的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

假设我们有实体类:

	    public class Person

	    {

	        public string Name

	        {

	            get;

	            set;

	        }
	        public int Age

	        {

	            get;

	            set;

	        }

	        public Family Family

	        {

	            get;

	            set;

	        }

	    }


	    public class Family

	    {

	        public string Husband

	        {

	            get;

	            set;

	        }

	        public string Child

	        {

	            get;

	            set;

	        }

	    }

 

一、如何将Person的实例序列化为XML文件呢?XmlSerializer会帮我们完成这件事情。

	            System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(typeof(Person));

	            /*

	             * 对象生成XML文件

	             * */

	            Person p = new Person();

	            p.Name = "Elena";

	            p.Age = 25;            Family f = new Family();

	            f.Husband = "Will";

	            f.Child = "Tom";

	            p.Family = f;            using (System.IO.FileStream fs = new System.IO.FileStream(

	                string.Format("{0}\\{1}", AppDomain.CurrentDomain.BaseDirectory, "text.xml"),

	                System.IO.FileMode.OpenOrCreate,

	                System.IO.FileAccess.ReadWrite))

	            {

	                serializer.Serialize(fs, p);

	                fs.Close();

	            }
生成后的XML文件如下:
	<?xml version="1.0"?>

	<Person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">

	  <Name>Elena</Name>

	  <Age>25</Age>

	  <Family>

	    <Husband>Will</Husband>

	    <Child>Tom</Child>

	  </Family>

	</Person>

二、如何将XML文件反序列化为对象实例?XmlSerializer会帮我们完成这件事情。

            	    System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(typeof(Person));     Person p;

	            using (System.IO.FileStream fs = new System.IO.FileStream(

	                string.Format("{0}\\{1}", AppDomain.CurrentDomain.BaseDirectory, "text.xml"),

	                System.IO.FileMode.OpenOrCreate,

	                System.IO.FileAccess.ReadWrite))

	            {

	                p = serializer.Deserialize(fs) as Person;

	                fs.Close();

	            }            if (p != null)

	            {

	                Console.WriteLine(string.Format("Name\t= {0}", p.Name));

	                Console.WriteLine(string.Format("Age\t= {0}", p.Age));

	                Console.WriteLine(string.Format("Husband\t= {0}", p.Family.Husband));

	                Console.WriteLine(string.Format("Child\t= {0}", p.Family.Child));

	            }

	            Console.ReadKey();

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值