反序列化带属性和值的xml节点集合

解析XML如下,需要取得Location节点的值和属性 
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Hotel Id="123456456">
    <Images>
        <Image AuthorType="Hotel" Type="8" IsCoverImage="true" RoomId="0002">
            <Locations>
                <Location WaterMark="0" Size="1">http://pavo.elongstatic.com/i/API350_350/633e7d224c5eb5585c66f1fd9b33a02e.jpg</Location>
                <Location WaterMark="0" Size="2">http://pavo.elongstatic.com/i/Hotel70_70/0000j0nt.jpg</Location>
                <Location WaterMark="0" Size="3">http://pavo.elongstatic.com/i/Hotel120_120/0000j0nt.jpg</Location>
                <Location WaterMark="1" Size="7">http://pavo.elongstatic.com/i/Mobile640_960/0000j0nt.jpg</Location>
            </Locations>
        </Image>
        <Image AuthorType="Hotel" Type="8" RoomId="0002">
            <IsRoomCoverImage>true</IsRoomCoverImage>
            <Locations>
                <Location WaterMark="0" Size="1">http://pavo.elongstatic.com/i/API350_350/73757abaff632f006bddc9317a16c0f6.jpg</Location>
                <Location WaterMark="0" Size="2">http://pavo.elongstatic.com/i/Hotel70_70/0000ipe7.jpg</Location>
                <Location WaterMark="0" Size="3">http://pavo.elongstatic.com/i/Hotel120_120/0000ipe7.jpg</Location>
                <Location WaterMark="1" Size="7">http://pavo.elongstatic.com/i/Mobile640_960/0000ipe7.jpg</Location>
            </Locations>
        </Image>
    </Images>
        <Room Amount="1" Area="16" Description="大床1.5米、9楼、16平米、免费宽带、可入住1人" BedType="大床1.5米" BroadnetFee="0" Capacity="1" Facilities="42,63,65,67,75,80,82,109,110,130,143,149,153,156,677,86,89" Floor="9" BroadnetAccess="1" Comments="长租房,不含水电费,物业费" Name="大床房" Id="0001"/>
        <Room Amount="1" Area="20" Description="双床、9楼、20平米、免费宽带、可入住2人" BedType="双床" BroadnetFee="0" Capacity="2" Facilities="49,63,65,67,75,80,82,109,110,130,143,149,153,156,677,86,90" Floor="9" BroadnetAccess="1" Comments="; 1.5米; " Name="标准间" Id="0002"/>
    </Rooms>
</Hotel>

实体类

using System;
using System.Collections.Generic;
using System.Xml.Serialization;

namespace ElongDataCache.Model
{
	[XmlRoot(ElementName = "Hotel")]
    public class ResHotelDetail
    {
        /// <summary>
        ///详情
        /// </summary>
        [XmlAttribute]
        public string Id { get; set; }

        /// <summary>
        ///图片
        /// </summary>
        [XmlArray("Images"), XmlArrayItem("Image")]
        public List<Image> Images { get; set; }
	}
	  [XmlRoot("Image")]
    public class Image
    {
        /// <summary>
        ///关联的房型
        /// </summary>
        [XmlAttribute]
        public string RoomId { get; set; }

        /// <summary>
        ///图片类型
        /// </summary>
        [XmlAttribute]
        public string Type { get; set; }

        /// <summary>
        ///是否是主图
        /// </summary>
        [XmlAttribute]
        public string IsCoverImage { get; set; }

        /// <summary>
        ///图片地址
        /// </summary>
        //[XmlArray("Locations"), XmlArrayItem("Location")]
        [XmlArray("Locations")]
        [XmlArrayItem("Location", typeof(Location))]
        public List<Location> Locations { get; set; }

        /// <summary>
        ///作者类型
        /// </summary>
        [XmlAttribute]
        public string AuthorType { get; set; }
    }

    [Serializable()]
    public class Location
    {
        /// <summary>
        ///图片路径
        /// </summary>
        [XmlText]
        public string Value { get; set; }

        /// <summary>
        ///图片规格
        /// </summary>
        [XmlAttribute]
        public string SizeType { get; set; } = "1";

        /// <summary>
        /// 是否有水印
        /// </summary>
        [XmlAttribute]
        public string WaterMark { get; set; }
    }
}

解析:

 /// <summary>
        /// 反序列化
        /// </summary>
        /// <param name="xmlFile">XML文件路径</param>
        /// <returns></returns>
        public static object DeserializeFile<T>(string xmlFile)
        {
            try
            {
                using (StreamReader sr = new StreamReader(xmlFile))
                {
                    XmlSerializer xmldes = new XmlSerializer(typeof(T));
                    return xmldes.Deserialize(sr);
                }
            }
            catch (Exception)
            {
                return null;
            }
        }
		
		 private void button3_Click(object sender, EventArgs e)
        {
            // 定义下载路径
            string savePath = Environment.CurrentDirectory + "\\";
            ResHotelDetail detail = (ResHotelDetail)DeserializeFile<ResHotelDetail>(savePath + "90594615.xml");
        }


  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值