Welcome 微信登录

首页 / 网页编程 / ASP.NET / asp.net类序列化生成xml文件实例详解

本文实例讲述了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一起传入,序列化出一个字符串sbser.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程序设计有所帮助。