XML文档、序列化与反序列化

XML: 

摘要: XML(Extensible Markup Language)可扩展的标记语言    对于一些数据不是很大的程序,或者只是一些配置文件,需要本地存储的,完全可以使用XML代替数据库,因为只是去操作单个文件会比操作数据库要简单很多,在程序中访问和操作XML一般使用DOM(文档对象模型)和流模式。XML有着严格的格式要求,比如要求元素必须是一对对显示的,XML还有一个很重要的特性就是通用性高,很多的程序包括Web和App底层数据交换都是转换成XML来进行数据交换的

一个简单的XML文件:

<?xml version="1.0" encoding="utf-8"?>
<Person>
  <Student ID="1">
    <Name>张三</Name>
    <Age>10</Age>
    <Gender>男</Gender>
  </Student>
  <Student ID="2">
    <Name>李四</Name>
    <Age>12</Age>
    <Gender>女</Gender>
  </Student>
  <Student ID="3">
    <Name>王五</Name>
    <Age>20</Age>
    <Gender>男</Gender>
  </Student>
</Person>

其中:Person为根节点, Student为Person下的子节点然后一层一层下去

C#创建XML文档:

    (1)引用: 
        using System.Xml;
    (2)创建XML对象
        XmlDocument doc= new XmlDocument();
        XmlDeclaration dec=doc.CreateXmlDeclaration("1.0","utf-8",null);
        doc.AppendChild(dec);    
    (3)创建根节点(只能有一个)
        XmlElement Person =doc.CreateElement("Person");
        doc.AppendChild(Person);   //追加到doc下
    (4)为根节点添加子节点
        XmlElement student= doc.CreateElement("Student");
        student.SetAttribute("ID",1);    //设置子节点的属性 
        Person.AppendChild(student);      //添加到根节点下
    (5)添加子节点,设置文本
XmlElement xx =doc.CreateElement("XX");
xx.InnerText="设置的文本" xx.InnerXml="设置的标签";
Student.AppendChild(XX);
(6)保存XML文档
doc.Save("文件路径");

C#使用XML文档

(1)创建一个XML文档对象:          XmlDocument doc= new XmlDocument();
(2)加载XML文档:                     doc.Load("文档路径");
(3)获得根节点                           XmlElement Person=doc.DocumentElement;
(4)获得根节点下面所有的子节点    XmlNodeList xnl=Person.ChildNodes;
(5)遍历子节点,获取数据:
 foreach(XmlNode item in xnl)
 {
      //依次拿到文件的数据
     -->属性类型:item.Attributes["名称"].Value;
    -->文本类型:item["名称"].InnerText;
     -->标签类型:item["名称"].InnerXml;
 }
       

       

序列化与反序列化:

摘要:  将程序的某些数据存储在内存中,然后将其写入某个文件或是将它传输到网络中的另一台计算机上以实现通讯。这个将程序数据转化成能被存储并传输的格式的过程被称为"序列化"(Serialization),而它的逆过程则可被称为"反序列化"(Deserialization)。

 //标记一个类可以被序列化:
  [Serializable]

//序列化:流->序列化对象->序列化
using (FileStream fwrite = new FileStream("config.config", FileMode.OpenOrCreate, FileAccess.Write))
 {
       //创建序列化对象
         BinaryFormatter bf = new BinaryFormatter();

         //开始序列化
          bf.Serialize(fwrite, mc);
}

//反序列化
using (FileStream fRead = new FileStream("config.config", FileMode.Open, FileAccess.Read))
{
    BinaryFormatter bf = new BinaryFormatter();
    mc = bf.Deserialize(fRead) as MoveCongfig;
 }
         
            

总结:目前对xml和序列化和反序列化没有太大研究,网页开发中的json以后再做补充

原文地址:https://www.cnblogs.com/xsh-cs/p/8471249.html