asp.net类序列化生成xml文件实例详解
更新时间:2021年9月22日 10:09 点击:1716
本文实例讲述了asp.net类序列化生成xml文件的方法。分享给大家供大家参考,具体如下:
根据设计的需求需要开发多个商品的API 原XML文件如下:
<urlset> <url> <loc>http://www.xxxxx.com/todaydetials.aspx?id=143</loc> <data> <display> <website>爱购114</website> <siteurl>http://www.xxxxx.com/</siteurl> <city>杭州</city> <webSitetitle></webSitetitle> <image></image> <startTime>2011-2-9</startTime> <endTime>2011-2-15</endTime> <value>3880</value> <price>2088</price> <rebate>0.53</rebate> <bought>0</bought> </display> </data> </url> </urlset>
现在需求是要根据数据库有几条商品信息 相应的API XML文件出现几个URL节点! 采用类序列化成XML文件然后读取相应生成的XML文件就可以展示多个商品XML的信息 实现代码如下:
首先定义好XML 各个节点的数据及父子节点的关系类:
#region 定义数据实体类xml数据结构 public class urlset { public List<url> urlList { get; set; } } public class url { public string loc { get; set; } public List<data> dataList { get; set; } } public class data { public List<display> displayList { get; set; } } public class display { public string website { get; set; } public string siteurl { get; set; } public string city { get; set; } public string webSitetitle { get; set; } public string image { get; set; } public string startTime { get; set; } public string endTime { get; set; } public double value { get; set; } public double price { get; set; } public double rebate { get; set; } public int bought { get; set; } } #endregion
第二步:#region 定义获取网站信息实体类
public class WebSiteInfo { /// <summary> /// 商品标题 /// </summary> public string title { get; set; } /// <summary> /// 商品发布时间 /// </summary> public DateTime createtime { get; set; } /// <summary> /// 商品图片 /// </summary> public string productimg { get; set; } /// <summary> /// 市场价 /// </summary> public decimal market_price { get; set; } /// <summary> /// 团购价 /// </summary> public decimal team_price { get; set; } /// <summary> /// 折扣价 /// </summary> public decimal zhekou_price { get; set; } /// <summary> /// 城市名称 /// </summary> public string cityName { get; set; } /// <summary> /// 商品开始时间 /// </summary> public DateTime begin_time { get; set; } /// <summary> /// 结束时间 /// </summary> public DateTime end_time { get; set; } /// <summary> /// 商家名称 /// </summary> public string merchants_id { get; set; } /// <summary> /// 本单详情 /// </summary> public string description { get; set; } /// <summary> /// 最低购买人数 /// </summary> public int lowBuNo { get; set; } /// <summary> /// 商家地址 /// </summary> public string Address { get; set; } /// <summary> /// 商家电话 /// </summary> public string Telphone { get; set; } /// <summary> /// 城市区号 /// </summary> public string cCode { get; set; } /// <summary> /// 文件夹名称 /// </summary> public string folderName { get; set; } /// <summary> /// 团购状态 /// </summary> public string StatusMessage { get; set; } /// <summary> /// 现在购买人数 /// </summary> public int nownumber { get; set; } /// <summary> /// 商品编号 /// </summary> public int productID { get; set; } } #endregion
第三步:获取数据库商品信息记录并添加到对象的集合中(Arraylist):
#region 获取xml实体类信息 /// <summary> /// 获取xml实体类信息 /// </summary> /// <returns></returns> public static ArrayList GetWebModelInfo() { ArrayList list = new ArrayList(); string strSQL = "select a.id, a.merchantsID,a.cCode,a.prodCode,a.statue,a.now_number, a.title,a.createtime,a.productimg,a.market_price,a.team_price,a.zhekou_price,a.cityName,a.begin_time,a.end_time,a.description,a.lowBuyNo,b.Address,b.Tel from tg_product as a left join tg_merchants as b on a.merchantsID=b.merchants_id where a.ispublic=1 and statue>-1 and getdate()<dateadd(day,1,a.end_time) order by a.createtime desc"; DataSet ds = FrameWork.Data.SqlHelper.ReturnDataSet(CommandType.Text, strSQL, null); if (ds.Tables[0].Rows.Count > 0) { foreach (DataRow dr in ds.Tables[0].Rows) { WebSiteInfo webModel = new WebSiteInfo(); //城市名称 webModel.cityName = dr["cityName"].ToString(); //商品标题 webModel.title = dr["title"].ToString(); //商品创建时间 webModel.createtime = Convert.ToDateTime(dr["createtime"].ToString()); //商家名称 webModel.merchants_id = dr["merchantsID"].ToString(); //商品图片 webModel.productimg = dr["productimg"].ToString(); //市场价 webModel.market_price = Convert.ToDecimal(dr["market_price"].ToString()); //团购价 webModel.team_price = Convert.ToDecimal(dr["team_price"].ToString()); //折扣价 webModel.zhekou_price = Convert.ToDecimal(dr["zhekou_price"].ToString()); //开始时间 webModel.begin_time = Convert.ToDateTime(dr["begin_time"].ToString()); //结束时间 webModel.end_time = Convert.ToDateTime(dr["end_time"].ToString()); //商品说明 webModel.description = dr["description"].ToString(); //最低购买数量 webModel.lowBuNo = Convert.ToInt32(dr["lowBuyNo"].ToString()); //商家电话 webModel.Telphone = dr["Tel"].ToString(); //商家地址 webModel.Address = dr["Address"].ToString(); //城市编号 webModel.cCode = dr["cCode"].ToString(); //图片文件夹名称 webModel.folderName = dr["prodCode"].ToString(); //现在购买人数 webModel.nownumber = Convert.ToInt32(dr["now_number"].ToString()); //商品编号 webModel.productID = Convert.ToInt32(dr["id"].ToString()); int status = Convert.ToInt32(dr["statue"].ToString()); switch (status) { case 0: webModel.StatusMessage = "结束"; break; case 1: webModel.StatusMessage = "成功"; break; } list.Add(webModel); } } return list; } #endregion
最后一步将数据库读取来的信息赋值到XML 数据类型中 并序列化成XML文件保存成XML格式的文件读取文件展现到界面:
#region 页面加载 根据数据库商品记录数生成xml文件信息 /// <summary> /// 页面加载 根据数据库商品记录数生成xml文件信息 /// </summary> List<url> urlList = null; urlset urlsetList = new urlset(); protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { ArrayList listinfo=GetWebModelInfo(); urlList = new List<url>(); for (int i = 0; i < listinfo.Count; i++) { WebSiteInfo webInfo = listinfo[i] as WebSiteInfo; List<display> displayList = new List<display>(); display display = new display(); display.website = "爱购114"; display.siteurl = "http://www.xxxxx.com/"; //城市名称 display.city = webInfo.cityName; //商品标题 display.webSitetitle = webInfo.title; //商品图片 display.image = "http://211.155.235.30/tuangou/" + webInfo.folderName + "/" + webInfo.productimg; //商品开始时间 display.startTime = webInfo.begin_time.ToShortDateString(); //商品结束时间 display.endTime = webInfo.end_time.ToShortDateString(); //市场价 display.value = Convert.ToDouble(webInfo.market_price); //团购价 display.price = Convert.ToDouble(webInfo.team_price); //折扣价 display.rebate = Convert.ToDouble(webInfo.zhekou_price); //现在购买的人数 display.bought = webInfo.nownumber; displayList.Add(display); List<data> dataList = new List<data>(); data data = new data(); data.displayList = displayList; dataList.Add(data); url url = new url(); url.loc = String.Format("http://www.xxxxx.com/todaydetials.aspx?id={0}", webInfo.productID.ToString()); url.dataList = dataList; urlList.Add(url); urlsetList.urlList = urlList; } try { XmlSerializerNamespaces xmlns = new XmlSerializerNamespaces(); xmlns.Add(String.Empty, String.Empty); //构造字符串 StringBuilder sb = new StringBuilder(); //将字符串写入到stringWriter对象中 StringWriter sw = new StringWriter(sb); //xml序列化对象 typeof(类名) XmlSerializer ser = new XmlSerializer(typeof(urlset)); //把Stream对象和urlset一起传入,序列化出一个字符串sb ser.Serialize(sw, urlsetList, xmlns); sw.Close(); string FILE_NAME = HttpContext.Current.Server.MapPath("API/54tuan.xml"); FileInfo fi = new FileInfo(FILE_NAME); //如果文件己经存在则删除该文件 if (fi.Exists) { if (fi.Attributes.ToString().IndexOf("ReadOnly") >= 0) { fi.Attributes = FileAttributes.Normal; } File.Delete(fi.Name); } //创建文件 并写入字符串 using (StreamWriter sWrite = File.CreateText(FILE_NAME)) { sWrite.Write(sb.ToString().Replace("encoding=/"utf-16/"", "encoding=/"utf-8/"").Replace("<urlList>", "").Replace("</urlList>", "").Replace("<dataList>", "").Replace("</dataList>", "").Replace("<displayList>", "").Replace("<displayList>", "").Replace("</displayList>", "")); sWrite.Close(); } //输出序列化后xml文件 Response.ClearContent(); Response.ClearHeaders(); Response.ContentType = "application/xml"; Response.WriteFile(HttpContext.Current.Server.MapPath("API/54tuan.xml")); Response.Flush(); Response.Close(); } catch (Exception ex) { Response.Write(ex.Message); } finally { } } } #endregion
希望本文所述对大家asp.net程序设计有所帮助。
相关文章
- 这篇文章主要为大家详细介绍了ASP.NET购物车的实现过程,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-09-22
- 在开发过程中,使用Visual Studio的断点调试功能可以很方便帮我们调试发现程序存在的错误,同样Visual Studio也支持对SQL Server里面的存储过程进行调试,下面就让我们看看具体的调试方法。...2021-09-22
Jackson反序列化@JsonFormat 不生效的解决方案
这篇文章主要介绍了Jackson反序列化@JsonFormat 不生效的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-08-10- 本文介绍两种使用 php 生成二维码的方法。 (1)利用google生成二维码的开放接口,代码如下: /** * google api 二维码生成【QRcode可以存储最多4296个字母数字类型的任意文本,具体可以查看二维码数据格式】 * @param strin...2015-10-21
- 这篇文章主要介绍了Java生成随机姓名、性别和年龄的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-10-01
- 这篇文章主要介绍了C#生成随机数功能,涉及C#数学运算与字符串操作相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
ASP.NET Core根据环境变量支持多个 appsettings.json配置文件
这篇文章主要介绍了ASP.NET Core根据环境变量支持多个 appsettings.json配置文件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-09-22- 关于生成唯一数字ID的问题,是不是需要使用rand生成一个随机数,然后去数据库查询是否有这个数呢?感觉这样的话有点费时间,有没有其他方法呢?当然不是,其实有两种方法可以解决。 1. 如果你只用php而不用数据库的话,那时间戳+随...2015-11-24
- 这篇文章主要介绍了记一次EFCore类型转换错误及解决方案,帮助大家更好的理解和学习使用asp.net core,感兴趣的朋友可以了解下...2021-09-22
解决Mybatis中mapper.xml文件update,delete及insert返回值问题
这篇文章主要介绍了解决Mybatis中mapper.xml文件update,delete及insert返回值问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-11-23- 下面小编就为大家带来一篇jQuery为动态生成的select元素添加事件的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2016-09-01
- 经常制作开发不同的网站的后台,写过很多种不同的后台导航写法。 最终积累了这种最写法,算是最好的吧...2013-09-29
C#从数据库读取数据到DataSet并保存到xml文件的方法
这篇文章主要介绍了C#从数据库读取数据到DataSet并保存到xml文件的方法,涉及C#操作DataSet保存到XML文件的技巧,需要的朋友可以参考下...2020-06-25- 下面小编就为大家带来一篇js操作XML文件的实现方法兼容IE与FireFox。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2016-07-01
- 在BS中,xml,html,css和js我们都学过,起初分不清这四者的区别和联系,随着知识的增长,有了一些体会,下面通过本文给大家简单介绍 XML、HTML、CSS与JS的区别,需要的朋友参考下...2016-02-21
- 这篇文章主要介绍了JS跨浏览器解析XML应用过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-10-16
- js生成随机数主要用到了内置的Math对象的random()方法。用法如:Math.random()。它返回的是一个 0 ~ 1 之间的随机数。有了这么一个方法,那生成任意随机数就好理解了。比如实际中我们可能会有如下的需要: (1)生成一个 0 - 1...2015-10-21
详解ASP.NET Core 中基于工厂的中间件激活的实现方法
这篇文章主要介绍了ASP.NET Core 中基于工厂的中间件激活的实现方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-09-22- 验证码是一个现在WEB2.0中常见的一个功能了,像注册、登录又或者是留言页面,都需要注册码来验证当前操作者的合法性,我们会看到有些网站没有验证码,但那是更高级的验证了,...2016-11-25
- 复制代码 代码如下:function getTagStyle(){ $minFontSize=8; //最小字体大小,可根据需要自行更改 $maxFontSize=18; //最大字体大小,可根据需要自行更改 return 'font-size:'.($minFontSize+lcg_value()*(abs($maxFo...2013-10-04