本文实例讲述了asp.net类序列化生成xml文件的方法。分享给大家供大家参考,具体如下:
根据设计的需求需要开发多个商品的API 原XML文件如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
< 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 各个节点的数据及父子节点的关系类:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
|
#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 定义获取网站信息实体类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
|
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):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
#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格式的文件读取文件展现到界面:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
|
#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程序设计有所帮助。