asp.net類序列化生成xml文件實(shí)例詳解
本文實(shí)例講述了asp.net類序列化生成xml文件的方法。分享給大家供大家參考,具體如下:
根據(jù)設(shè)計(jì)的需求需要開發(fā)多個商品的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>
現(xiàn)在需求是要根據(jù)數(shù)據(jù)庫有幾條商品信息 相應(yīng)的API XML文件出現(xiàn)幾個URL節(jié)點(diǎn)! 采用類序列化成XML文件然后讀取相應(yīng)生成的XML文件就可以展示多個商品XML的信息 實(shí)現(xiàn)代碼如下:
首先定義好XML 各個節(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>
/// 市場價(jià)
/// </summary>
public decimal market_price { get; set; }
/// <summary>
/// 團(tuán)購價(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>
/// 最低購買人數(shù)
/// </summary>
public int lowBuNo { get; set; }
/// <summary>
/// 商家地址
/// </summary>
public string Address { get; set; }
/// <summary>
/// 商家電話
/// </summary>
public string Telphone { get; set; }
/// <summary>
/// 城市區(qū)號
/// </summary>
public string cCode { get; set; }
/// <summary>
/// 文件夾名稱
/// </summary>
public string folderName { get; set; }
/// <summary>
/// 團(tuán)購狀態(tài)
/// </summary>
public string StatusMessage { get; set; }
/// <summary>
/// 現(xiàn)在購買人數(shù)
/// </summary>
public int nownumber { get; set; }
/// <summary>
/// 商品編號
/// </summary>
public int productID { get; set; }
}
#endregion
第三步:獲取數(shù)據(jù)庫商品信息記錄并添加到對象的集合中(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();
//市場價(jià)
webModel.market_price = Convert.ToDecimal(dr["market_price"].ToString());
//團(tuán)購價(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();
//最低購買數(shù)量
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();
//現(xiàn)在購買人數(shù)
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 = "結(jié)束";
break;
case 1:
webModel.StatusMessage = "成功";
break;
}
list.Add(webModel);
}
}
return list;
}
#endregion
最后一步將數(shù)據(jù)庫讀取來的信息賦值到XML 數(shù)據(jù)類型中 并序列化成XML文件保存成XML格式的文件讀取文件展現(xiàn)到界面:
#region 頁面加載 根據(jù)數(shù)據(jù)庫商品記錄數(shù)生成xml文件信息
/// <summary>
/// 頁面加載 根據(jù)數(shù)據(jù)庫商品記錄數(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 = "愛購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();
//市場價(jià)
display.value = Convert.ToDouble(webInfo.market_price);
//團(tuán)購價(jià)
display.price = Convert.ToDouble(webInfo.team_price);
//折扣價(jià)
display.rebate = Convert.ToDouble(webInfo.zhekou_price);
//現(xiàn)在購買的人數(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對象中
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);
//如果文件己經(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
希望本文所述對大家asp.net程序設(shè)計(jì)有所幫助。
相關(guān)文章
ASP.NET MVC中jQuery與angularjs混合應(yīng)用傳參并綁定數(shù)據(jù)
這篇文章主要介紹了ASP.NET MVC中jQuery與angularjs混合應(yīng)用傳參并綁定數(shù)據(jù),需要的朋友可以參考下2017-06-06
ABP框架中導(dǎo)航菜單的使用及JavaScript API獲取菜單的方法
ABP框架是基于ASP.NET的Web開發(fā)框架,其中包含基本的菜單項(xiàng)可供調(diào)用,特別是自動生成的js API使得能夠在客戶端獲取菜單,這里我們就來看一下ABP框架中導(dǎo)航菜單的使用及JavaScript API獲取菜單的方法2016-06-06
ASP.NET Core 奇技淫巧之接口代理轉(zhuǎn)發(fā)的實(shí)現(xiàn)
這篇文章主要介紹了ASP.NET Core 奇技淫巧之接口代理轉(zhuǎn)發(fā)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08
Asp.net 獲取指定目錄下的后綴名為".doc" 的所有文件名和文件路徑
Asp.net 獲取指定目錄下的后綴名為“.doc” 的所有文件名和文件路徑,幫寫一個方法2011-07-07
詳解ASP.NET MVC 利用Razor引擎生成靜態(tài)頁
本篇文章主要介紹了ASP.NET MVC 利用Razor引擎生成靜態(tài)頁,詳細(xì)的介紹了原理和步驟,具有一定的參考價(jià)值,有興趣的可以了解一下。2017-03-03
asp.net顯示圖片到指定的Image控件中 具體實(shí)現(xiàn)
這篇文章介紹了asp.net顯示圖片到指定的Image控件中 具體實(shí)現(xiàn),有需要的朋友可以參考一下2013-11-11
asp.net使用DataTable構(gòu)造Json字符串的方法
這篇文章主要介紹了asp.net使用DataTable構(gòu)造Json字符串的方法,涉及asp.net字符串序列化、遍歷及構(gòu)造等操作技巧,需要的朋友可以參考下2015-12-12

