最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

XML序列化与反序列化

来源:动视网 责编:小OO 时间:2025-10-01 20:57:36
文档

XML序列化与反序列化

主要类库介绍  .NET支持对象xml序列化和反序列化的类库主要位于命名空System.Xml.Serialization中。  1. XmlSerializer类  该类用一种高度松散耦合的方式提供串行化服务。你的类不需要继承特别的基类,而且它们也不需要实现特别的接口。相反,你只需在你的类或者这些类的公共域以及读/写属性里加上自定义的特性。XmlSerializer通过反射机制读取这些特性并用它们将你的类和类成员映射到xml元素和属性。  2.XmlAttributeAttribute类  
推荐度:
导读主要类库介绍  .NET支持对象xml序列化和反序列化的类库主要位于命名空System.Xml.Serialization中。  1. XmlSerializer类  该类用一种高度松散耦合的方式提供串行化服务。你的类不需要继承特别的基类,而且它们也不需要实现特别的接口。相反,你只需在你的类或者这些类的公共域以及读/写属性里加上自定义的特性。XmlSerializer通过反射机制读取这些特性并用它们将你的类和类成员映射到xml元素和属性。  2.XmlAttributeAttribute类  
主要类库介绍

   .NET 支持对象xml序列化和反序列化的类库主要位于命名空System.Xml.Serialization中。

   1.  XmlSerializer 类

   该类用一种高度松散耦合的方式提供串行化服务。你的类不需要继承特别的基类,而且它们也不需要实现特别的接口。相反,你只需在你的类或者这些类的公共域以及读/写属性里加上自定义的特性。XmlSerializer通过反射机制读取这些特性并用它们将你的类和类成员映射到xml元素和属性。

   2. XmlAttributeAttribute 类

   指定类的公共域或读/写属性对应xml文件的Attribute。

   例:[XmlAttribute(“type”)] or [XmlAttribute(AttributeName=”type”)]

   3. XmlElementAttribute类

   指定类的公共域或读/写属性对应xml文件的Element。

   例:[XmlElement(“Maufacturer”)] or [XmlElement(ElementName=”Manufacturer”)]

   4. XmlRootAttribute类

   Xml序列化时,由该特性指定的元素将被序列化成xml的根元素。

   例:[XmlRoot(“RootElement”)] or [XmlRoot(ElementName = “RootElements”)]

   5. XmlTextAttribute 类

   Xml序列化时,由该特性指定的元素值将被序列化成xml元素的值。一个类只允许拥有一个该特性类的实例,因为xml元素只能有一个值。

   6. XmlIgnoreAttribute类

   Xml序列化时不会序列化该特性指定的元素。

三 实例

   下面例子中的xml schema 描述了一个简单的人力资源信息,其中包含了xml的大部分格式,如xml 元素相互嵌套, xml元素既有元素值,又有属性值。

   1. 待序列化的类层次结构

    [XmlRoot("humanResource")]

    public class HumanResource

    {

        #region private data.

        private int m_record = 0;

        private Worker[] m_workers = null;

        #endregion

 

        [XmlAttribute(AttributeName="record")]

        public int Record

        {

            get { return m_record; }

            set { m_record = value; }

        }

 

        [XmlElement(ElementName="worker")]

        public Worker[] Workers

        {

            get { return m_workers; }

            set { m_workers = value; }

        }

}

 

    public class Worker

    {

        #region private data.

        private string m_number = null;

        private InformationItem[] m_infoItems = null;

        #endregion

 

        [XmlAttribute("number")]

        public string Number

        {

            get { return m_number; }

            set { m_number = value; }

        }

 

        [XmlElement("infoItem")]

        public InformationItem[] InfoItems

        {

            get { return m_infoItems; }

            set { m_infoItems = value; }

        }

}

 

    public class InformationItem

    {

        #region private data.

        private string m_name = null;

        private string m_value = null;

        #endregion

 

        [XmlAttribute(AttributeName = "name")]

        public string Name

        {

            get { return m_name; }

            set { m_name = value; }

        }

 

        [XmlText]

        public string Value

        {

            get { return m_value; }

            set { m_value = value; }

        }

}

   2. 序列化生成的xml结构

       

                 Michale

                 male

                 25

            

                 Surce

                 male

                 28

           

         

   3. 利用XmlSerializer类进行序列化和反序列化的实现(一般利用缓存机制实现xml文件只解析一次。)

    public sealed class ConfigurationManager

    {

        private static HumanResource m_humanResource = null;

        private ConfigurationManager(){}

 

        public static HumanResource Get(string path)

        {

            if (m_humanResource == null)

            {

                FileStream fs = null;

                try

                {

                    XmlSerializer xs = new XmlSerializer(typeof(HumanResource));

                    fs = new FileStream(path, FileMode.Open, FileAccess.Read);

                    m_humanResource = (HumanResource)xs.Deserialize(fs);

                    fs.Close();

                    return m_humanResource;

                }

                catch

                {

                    if (fs != null)

                        fs.Close();

                    throw new Exception("Xml deserialization failed!");

                }

 

            }

            else

            {

                return m_humanResource;

            }

        }

 

        public static void Set(string path, HumanResource humanResource)

        {

            if (humanResource == null)

                throw new Exception("Parameter humanResource is null!");

            

            FileStream fs = null;

            try

            {

                XmlSerializer xs = new XmlSerializer(typeof(HumanResource));

                fs = new FileStream(path, FileMode.Create, FileAccess.Write);

                xs.Serialize(fs, humanResource);

                m_humanResource = null;

                fs.Close();

            }

            catch

            {

                if (fs != null)

                    fs.Close();

                throw new Exception("Xml serialization failed!");

            }

        }

    }

文档

XML序列化与反序列化

主要类库介绍  .NET支持对象xml序列化和反序列化的类库主要位于命名空System.Xml.Serialization中。  1. XmlSerializer类  该类用一种高度松散耦合的方式提供串行化服务。你的类不需要继承特别的基类,而且它们也不需要实现特别的接口。相反,你只需在你的类或者这些类的公共域以及读/写属性里加上自定义的特性。XmlSerializer通过反射机制读取这些特性并用它们将你的类和类成员映射到xml元素和属性。  2.XmlAttributeAttribute类  
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top