xml序列化和反序列化(二)

时间:2022-07-22
本文章向大家介绍xml序列化和反序列化(二),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

上篇讲到关于xml入参实体序列化,下面给出出参实体反序列化,代码如下:

    /// <summary>
    /// 反序列化
    /// </summary>
    /// <param name="strXML">XML字符串</param>
    /// <returns></returns>
    public static T DESerializer<T>(string strXML) where T : class
    {
        try
        {
            using (StringReader sr = new StringReader(strXML))
            {
                XmlSerializer serializer = new XmlSerializer(typeof(T));
                return serializer.Deserialize(sr) as T;
            }
        }
        catch (Exception ex)
        {
            return null;
        }
    }

这方法,网上一般都能找到,针对复杂的xml,可以定义不同的实体对应进行解析,这里就不多说了,我要重点说的是怎么完美解析任意xml文档,先看一下示例代码:

//xml转实体
            string xml = "<?xml version="1.0" encoding="utf - 8" ?>"+
                        @"<PacsResult>
                           <successe>true</successe> 
                           <msg>成功</msg>
                           <reports> 
                             <report>
                               <PatientsName>Cui Jian Hong</PatientsName>
                               <PatientsID>P57748</PatientsID>
                             </report>
                          </reports>
                         </PacsResult>";
          //  var data = XElement.Parse(xml).Descendants("report");
            var data = XElement.Parse(xml).Descendants("reports").Elements("report");
            List<rep> repList = new List<rep>();
            foreach (var item in data)
            {
                repList.Add(new rep()
                {
                    PatientsName = item.Element("PatientsName").Value,
                    PatientsID = item.Element("PatientsID").Value,
                });
            }

Descendants和Elements就可以对xml进行完美解析。

Descendants:按文档顺序返回经过筛选的此文档或元素的子代元素的集合; Elements:源集合中返回经过筛选的子集合元素的每个元素和 文档; 有什么区别呢,请参考博友的文章,通过两篇文章介绍,相信大家对入参xml封装和出参xml解析有了完美的解决方案。欢迎批评指正! 全文完!