反序列化带属性和值的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");
}
相关文章推荐
- C# XML 输出xml根节点下的直接(第一级)子节点所有的属性的名字和值
- php xml修改节点中的属性和值
- C# XML 输出xml根节点下的直接(第一级)子节点指定的属性的名字和值
- 实体序列化生成个性XML ,生成XML节点/属性
- Flex中如何通过给openItems属性设置一个XMLList或Array对象来打开Tree的一个节点的例子
- js访问xml之节点对象属性和方法【1】
- 对象,对象集合的简单Xml序列化与反序列化
- asp操作xml,添加新的子节点和属性
- xml序列化集合
- xml序列化简化程序配置文件中自定义配置节点的Create方法
- 对象,对象集合的简单Xml序列化与反序列化 【实用代码,含泛型方法】
- 递规法遍历xml树的属性和节点值
- XML参考 :XmlReader 详解、实例(3)-- 读取XML节点和属性名称
- 遍历XML文档的所有节点及属性(ASP)
- C#中对象集合XML的序列化与反序列化
- 前面在《Asp.Net Forums中对.Net中序列化和反序列化的应用》一文中讲了,对于一些扩展属性,可以将字符串集合序列化为二进制,也可以从二进制反序列化为字符串集合。其实我一直有个疑问,对于asp.net中可以很容易实现,但是在asp中该如何?
- js操作dom(4)-关于xml节点属性的操作
- js为xml添加节点和属性
- 实现对Xml文档中的指定节点添加 属性和属性值
- Delphi 中的 XMLDocument 类详解(6) - 访问节点属性