這篇文章主要介紹了asp.net類序列化生成xml文件的方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了asp.net序列化生成xml文件的具體步驟與相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
本文實(shí)例講述了asp.net類序列化生成xml文件的方法。分享給大家供大家參考,具體如下:
根據(jù)設(shè)計(jì)的需求需要開發(fā)多個(gè)商品的API 原XML文件如下:
- <urlset>
- <url>
- <loc>http://www.xxxxx.com/todaydetials.aspx?id=143</loc>
- <data>
- <display>
- <website>愛購(gòu)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>
現(xiàn)在需求是要根據(jù)數(shù)據(jù)庫(kù)有幾條商品信息 相應(yīng)的API XML文件出現(xiàn)幾個(gè)URL節(jié)點(diǎn)! 采用類序列化成XML文件然后讀取相應(yīng)生成的XML文件就可以展示多個(gè)商品XML的信息 實(shí)現(xiàn)代碼如下:
首先定義好XML 各個(gè)節(jié)點(diǎn)的數(shù)據(jù)及父子節(jié)點(diǎn)的關(guān)系類:
- #region 定義數(shù)據(jù)實(shí)體類xml數(shù)據(jù)結(jié)構(gòu)
- 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 定義獲取網(wǎng)站信息實(shí)體類
- public class WebSiteInfo
- {
- /// <summary>
- /// 商品標(biāo)題
- /// </summary>
- public string title { get; set; }
- /// <summary>
- /// 商品發(fā)布時(shí)間
- /// </summary>
- public DateTime createtime { get; set; }
- /// <summary>
- /// 商品圖片
- /// </summary>
- public string productimg { get; set; }
- /// <summary>
- /// 市場(chǎng)價(jià)
- /// </summary>
- public decimal market_price { get; set; }
- /// <summary>
- /// 團(tuán)購(gòu)價(jià)
- /// </summary>
- public decimal team_price { get; set; }
- /// <summary>
- /// 折扣價(jià)
- /// </summary>
- public decimal zhekou_price { get; set; }
- /// <summary>
- /// 城市名稱
- /// </summary>
- public string cityName { get; set; }
- /// <summary>
- /// 商品開始時(shí)間
- /// </summary>
- public DateTime begin_time { get; set; }
- /// <summary>
- /// 結(jié)束時(shí)間
- /// </summary>
- public DateTime end_time { get; set; }
- /// <summary>
- /// 商家名稱
- /// </summary>
- public string merchants_id { get; set; }
- /// <summary>
- /// 本單詳情
- /// </summary>
- public string description { get; set; }
- /// <summary>
- /// 最低購(gòu)買人數(shù)
- /// </summary>
- public int lowBuNo { get; set; }
- /// <summary>
- /// 商家地址
- /// </summary>
- public string Address { get; set; }
- /// <summary>
- /// 商家電話
- /// </summary>
- public string Telphone { get; set; }
- /// <summary>
- /// 城市區(qū)號(hào)
- /// </summary>
- public string cCode { get; set; }
- /// <summary>
- /// 文件夾名稱
- /// </summary>
- public string folderName { get; set; }
- /// <summary>
- /// 團(tuán)購(gòu)狀態(tài)
- /// </summary>
- public string StatusMessage { get; set; }
- /// <summary>
- /// 現(xiàn)在購(gòu)買人數(shù)
- /// </summary>
- public int nownumber { get; set; }
- /// <summary>
- /// 商品編號(hào)
- /// </summary>
- public int productID { get; set; }
- }
- #endregion
第三步:獲取數(shù)據(jù)庫(kù)商品信息記錄并添加到對(duì)象的集合中(Arraylist):
- #region 獲取xml實(shí)體類信息
- /// <summary>
- /// 獲取xml實(shí)體類信息
- /// </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();
- //商品標(biāo)題
- webModel.title = dr["title"].ToString();
- //商品創(chuàng)建時(shí)間
- webModel.createtime = Convert.ToDateTime(dr["createtime"].ToString());
- //商家名稱
- webModel.merchants_id = dr["merchantsID"].ToString();
- //商品圖片
- webModel.productimg = dr["productimg"].ToString();
- //市場(chǎng)價(jià)
- webModel.market_price = Convert.ToDecimal(dr["market_price"].ToString());
- //團(tuán)購(gòu)價(jià)
- webModel.team_price = Convert.ToDecimal(dr["team_price"].ToString());
- //折扣價(jià)
- webModel.zhekou_price = Convert.ToDecimal(dr["zhekou_price"].ToString());
- //開始時(shí)間
- webModel.begin_time = Convert.ToDateTime(dr["begin_time"].ToString());
- //結(jié)束時(shí)間
- webModel.end_time = Convert.ToDateTime(dr["end_time"].ToString());
- //商品說明
- webModel.description = dr["description"].ToString();
- //最低購(gòu)買數(shù)量
- webModel.lowBuNo = Convert.ToInt32(dr["lowBuyNo"].ToString());
- //商家電話
- webModel.Telphone = dr["Tel"].ToString();
- //商家地址
- webModel.Address = dr["Address"].ToString();
- //城市編號(hào)
- webModel.cCode = dr["cCode"].ToString();
- //圖片文件夾名稱
- webModel.folderName = dr["prodCode"].ToString();
- //現(xiàn)在購(gòu)買人數(shù)
- webModel.nownumber = Convert.ToInt32(dr["now_number"].ToString());
- //商品編號(hào)
- webModel.productID = Convert.ToInt32(dr["id"].ToString());
- int status = Convert.ToInt32(dr["statue"].ToString());
- switch (status)
- {
- case 0:
- webModel.StatusMessage = "結(jié)束";
- break;
- case 1:
- webModel.StatusMessage = "成功";
- break;
- }
- list.Add(webModel);
- }
- }
- return list;
- }
- #endregion
最后一步將數(shù)據(jù)庫(kù)讀取來的信息賦值到XML 數(shù)據(jù)類型中 并序列化成XML文件保存成XML格式的文件讀取文件展現(xiàn)到界面:
- #region 頁(yè)面加載 根據(jù)數(shù)據(jù)庫(kù)商品記錄數(shù)生成xml文件信息
- /// <summary>
- /// 頁(yè)面加載 根據(jù)數(shù)據(jù)庫(kù)商品記錄數(shù)生成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 = "愛購(gòu)114";
- display.siteurl = "http://www.xxxxx.com/";
- //城市名稱
- display.city = webInfo.cityName;
- //商品標(biāo)題
- display.webSitetitle = webInfo.title;
- //商品圖片
- display.image = "http://211.155.235.30/tuangou/" + webInfo.folderName + "/" + webInfo.productimg;
- //商品開始時(shí)間
- display.startTime = webInfo.begin_time.ToShortDateString();
- //商品結(jié)束時(shí)間
- display.endTime = webInfo.end_time.ToShortDateString();
- //市場(chǎng)價(jià)
- display.value = Convert.ToDouble(webInfo.market_price);
- //團(tuán)購(gòu)價(jià)
- display.price = Convert.ToDouble(webInfo.team_price);
- //折扣價(jià)
- display.rebate = Convert.ToDouble(webInfo.zhekou_price);
- //現(xiàn)在購(gòu)買的人數(shù)
- 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);
- //構(gòu)造字符串
- StringBuilder sb = new StringBuilder();
- //將字符串寫入到stringWriter對(duì)象中
- StringWriter sw = new StringWriter(sb);
- //xml序列化對(duì)象 typeof(類名)
- XmlSerializer ser = new XmlSerializer(typeof(urlset));
- //把Stream對(duì)象和urlset一起傳入,序列化出一個(gè)字符串sb
- ser.Serialize(sw, urlsetList, xmlns);
- sw.Close();
- string FILE_NAME = HttpContext.Current.Server.MapPath("API/54tuan.xml");
- FileInfo fi = new FileInfo(FILE_NAME);
- //如果文件己經(jīng)存在則刪除該文件
- if (fi.Exists)
- {
- if (fi.Attributes.ToString().IndexOf("ReadOnly") >= 0) {
- fi.Attributes = FileAttributes.Normal;
- }
- File.Delete(fi.Name);
- }
- //創(chuàng)建文件 并寫入字符串
- 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
希望本文所述對(duì)大家asp.net程序設(shè)計(jì)有所幫助。
|
新聞熱點(diǎn)
疑難解答
圖片精選