您的位置:首页 > 其它

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

2017-02-09 09:58 176 查看
解析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");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: