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程序设计有所帮助。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索asp.net
, 序列化
, xml文件
, 生成
, asp.net序列化xml
asp.net生成xml
,以便于您获取更多的相关知识。

时间: 2024-08-01 13:52:57

asp.net类序列化生成xml文件实例详解_实用技巧的相关文章

ASP.NET 保留文件夹详解_实用技巧

1. Bin文件夹 Bin文件夹包含应用程序所需的,用于控件.组件或者需要引用的任何其他代码的可部署程序集.该目录中存在的任何.dll文 件将自动地链接到应用程序.如果在该文件夹中留有不用的或过期的文件,则可能出现"二义性引用(ambiguous reference)"异常的风险.换句话说,如果两个不同的程序集定义相同的类(相同的命名空间和名称),则ASP.NET运行库不能决定应该使用哪一 个程序集,从而抛出一个异常.在开发时,当我们重新命名一个项目或一个程序集的名称时,这是常见的错误

.net读写xml文档详解_实用技巧

一  .Net框架中与XML有关的命名空间 System.Xml包含了一些和XML文档的读写操作相关的类,它们分别是:XmlReader.XmlTextReader.XmlValidatingReader.XmlNodeReader.XmlWriter.XmlTextWriter 以及 XmlNode(它的子类包括:XmlDocument.XmlDataDocument.XmlDocumentFragment)等类. System.Xml.Schema包含了和XML模式相关的类,这些类包括Xml

ASP.NET4 GridView的四种排序样式详解_实用技巧

与ASP.NET 的其他Web控件一能够,Gridview控件拥有很多不同的CSS样式属性设置,包括象CssClass,Font字体,ForeColor,BackColor,BackColor, Width, Height等等.Gridview还包括了一些应用在表格的行上的样式属性,比如RowStyle, AlternatingRowStyle, HeaderStyle,和PagerStyle,它们都提供了象CssClass和Font这些基本的属性设置.  在 ASP.NET 4.0中的Grid

ASP.NET动态设置页面标题的方法详解_实用技巧

  ASP.NET为我们提供了一个控件类:System.Web.UI.HtmlControls.HtmlGenericControl.它可以实现HTML的元素的一个实例,比如在.cs代码中控制aspx中的<td>元素(注意,它不是<ASP:TableCell>).我们知道,页面标题是被包含在<TITLE></TITLE>中的,而<TITLE>也是一个HTML的元素,所以,我们就可以利用System.Web.UI.HtmlControls.Html

分析10个ASP.NET控件最有用的属性详解_实用技巧

1.ClientIDMode 渲染ASP.NET控件时会自动生成一个ID,当我们在客户端脚本中引用它们时,却会制造不少麻烦,虽然它是命名容器和ID的简单串联,但仍然无法预测生成的ID范围. ASP.NET 4.0使用ClientIDMode属性解决了这个问题,它允许你控制生成这些ID的方法,ClientIDMode有四个可选择的值:AutoID,Static,Predictable和Inherit.下面是这四个值的含义解释: AutoID – 和4.0以前的版本保持一致,自动生成ID. Stat

asp.net 支付宝及时到帐接口使用详解_实用技巧

其实支付宝公司已经给我们做的很好了, 只要少量的改动就OK了,只是有的程序员不太明天他们的动作流程而以,我就以及时到帐为例子来说了,呵呵 在这之前就大家先下载一下c#版的及时到帐代码    这里是下载地址http://dev.alipay.com/devclub/mvnforum/viewthread_thread,4;jsessionid=595DB7442AAA5CD2FC849E7C2FBE51D7   先看一下程序的结构吧     支付宝有一个类文件叫  AliPay 是一些加密算法之类

ASP.NET中水晶报表的使用方法详解_实用技巧

前一段时间,由于在项目中要用到报表做统计,所以我学习了一下ASP.NET水晶报表的使用.水晶报表的执行模式(也就是取数据的方法)可以分为两种: 第一种是Pull模式:被请求时,水晶报表直接根据指定的驱动连接数据库然后组装这些数据. 另外一种就是Push模式:此时开发者不得不自己编写代码连接数据并组装DataSet,同时将它传送至报表.在些这种情况下,通过使用连接共享以及限制记录集合的大小,可以使用报表性能最大化. 水晶报表中的报表类型也分为两种: --StrongTyped 报表: 当你将报表文

Asp.net,C# 加密解密字符串的使用详解_实用技巧

首先在web.config | app.config 文件下增加如下代码: 复制代码 代码如下: <?xml version="1.0"?>  <configuration>    <appSettings>      <add key="IV" value="SuFjcEmp/TE="/>      <add key="Key" value="KIPSToILG

asp.net Repeater 数据绑定的具体实现(图文详解)_实用技巧

以下为设计步骤: 1.在C# 中连接数据库.如下图:2.在项目中添加新建项,建立一个数据集,并把Categories从服务器资源列表中拖到这个数据集模板中并点击菜单"生成-生成解决方案",如下图: 3.在aspx的webform上放一个ObjectDataSource控件,设定它的TypeName为刚刚建立的数据集类型,用它的向导建立即可.4.在aspx的webform上放一个Repeater控件,用它的向导设定它的DataSourceID为上面的ObjectDataSource5.在