45fan.com - 路饭网

搜索: 您的位置主页 > 电脑频道 > 编程代码 > 阅读资讯:如何通过asp.net类序列化生成xml文件?

如何通过asp.net类序列化生成xml文件?

2016-07-06 22:20:45 来源:www.45fan.com 【

如何通过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一起传入,序列化出一个字符串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程序设计有所帮助。


本文地址:http://www.45fan.com/bcdm/56349.html
Tags: 生成 ASP.NET 序列化
编辑:路饭网
推广内容
推荐阅读
热门推荐
推荐文章
关于我们 | 联系我们 | 友情链接 | 网站地图 | Sitemap | App | 返回顶部