云在青天部落阁

独学而无友,则孤陋而寡闻。做一个灵魂有趣的人!
扩大
缩小

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(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(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

posted on 2019-07-24 15:55  NoMatterTryAgain  阅读(411)  评论(0)    收藏  举报

导航