C#反序列化XML

  • 序列化反序列化的概念
    seriallization 序列化 : 将对象转化为便于传输的格式, 常见的序列化格式:二进制格式,字节数组,json字符串,xml字符串。
    deseriallization 反序列化:将序列化的数据恢复为对象的过程。

  • Xml字符串反序列化为对象
    使用ADO.Net连接数据库查询到对应的字段下的XML字符串(贴一段代码)

      		  //创建连接对象,并使用using释放(关闭),连接用完后会被自动关闭
          using (SqlConnection conn = new SqlConnection("server=.;uid=*****;pwd=******;database=Lg_ExamRec_A"))
          {
              //打开连接
              conn.Open();
              //将执行的sql
              String sql = "select * from LgExamQues_New where QuesType='单选题'";
              //创建命令对象,指定要执行sql语句与连接对象conn
              SqlCommand cmd = new SqlCommand(sql, conn);
              //执行查询返回结果集
              SqlDataReader sdr = cmd.ExecuteReader();
              TContent quesSource = new TContent();
    
              //下移游标,读取一行,如果没有数据了则返回false
              while (sdr.Read())
              {
                  string tp = sdr["QuesType"].ToString().Trim();
                  if (tp == "单选题")
                  {
                      Console.WriteLine("---------------------------------------查询到的Xml文档-------------------------------");
                      Console.WriteLine("题型来源:" + sdr["QuesSourceXml"]);
                      Console.WriteLine("---------------------------------------对应的反序列化结果为:--------------------------------------");
                      string str = sdr["QuesSourceXml"].ToString();
    
                      quesSource = XmlSerialize.DeserializeXML<TContent>(str);
    
                      Console.WriteLine("编号:" + sdr["ID"]);
                      Console.WriteLine("题型:" + sdr["QuesType"]);
                      Console.WriteLine("题型编号:" + sdr["QuesTypeCode"]);
    
                      foreach (var item in quesSource.QuesChild)
                      {
                          //Console.WriteLine("分数:" + item.QuesScore.text);
                          foreach (var item1 in item.QuesOption)
                          {
                              Console.WriteLine("选项:" + item1.text);
                          }
    
    
                      }
    
              }
          }
          Console.ReadLine();
      }
    
  • Xml字符串反序列化的方法

     public static T DeserializeXML<T>(string xmlObj)
     {
        XmlSerializer serializer = new XmlSerializer(typeof(T));
        using (StringReader reader = new StringReader(xmlObj))
        {
            return (T)serializer.Deserialize(reader);
        }
     }
    
  • 根据Xml字符串中的节点建立对应的类

      1.建立对应类的时候注意节点要和类名一致
      2.注意父节点与子节点的包含关系
      3.注意节点与类型之间的关系
    

具体可参考:https://www.cnblogs.com/guogangj/p/7489218.html
https://www.cnblogs.com/bdstjk/archive/2012/01/19/2519860.html
https://blog.csdn.net/bdstjk/article/details/7210742
https://docs.microsoft.com/en-us/dotnet/standard/serialization/attributes-that-control-xml-serialization?view=netframework-4.8

原文地址:https://www.cnblogs.com/wecc/p/11238520.html