最近项目开发中的传输数据是围绕Remoting而召开的,所以想把所有的数据实体都定义统一的格式,于是就写了一个基于DataTable的基类BaseModal,其他数据实体全部继承于它。此BaseModal基类还包括了一些其他的自有的属性,例如pageSize每页记录数、currentPage当前页码等等,代码如下:

1
2
文件描述
13
14
修改记录
21
22
using System;
23
using System.Data;
24
using System.Text;
25
using System.Runtime.Serialization;
26
27
namespace Colorful.Model
28
{
29
/// <summary>
30
/// 数据基本表
31
/// </summary>
32
[Serializable]
33
public class BaseModel : DataTable
34
{
35
protected int index; //记录当前行
36
protected int pageSize; //每页记录数
37
protected int currentPage; //当前页码
38
protected int pages; //总页数
39
protected long totalRecord; //总记录数
40
protected string description; //其他描述,及其辅助功能
41
42
public int PageSize
54
55
public int CurrentPage
67
68
public int Pages
80
81
public long TotalRecord
93
94
public string Description
106
107
public string GUID
128
129
130
131
public BaseModel()
149
150
public bool MoveNext()
166
167
public bool MovePre()
183
184
public bool GoToRow(int rowIndex)
202
203
public bool GoToFirst()
220
221
public bool GoToLast()
238
239
#region public void Insert()
240
// -----------------------------------------------------------------------------------------
241
/// <summary>
242
/// 插入空行,并把空行当作当前行
243
/// </summary>
244
public void Insert()
245
{
246
Rows.Add(NewRow());
247
index = Rows.Count - 1;
248
}
249
// -----------------------------------------------------------------------------------------
250
#endregion
251
252
public void Delete()
270
271
}
272
}
273
结果发现数据在放序列化的时候出错,发现原来是没有加入序列化和反序列化构造函数,虽然BaseModal继承于DataTable,并且加入了[Serializable]树序列化属性,但是要实现想继承序列化,还是要加入构造函数,于是加入:
结果编译,没有任何错误,但是类中的属性(pageSize等)值却获取不到,想了很久,发现其实道理跟前面有些类似,因为自己加入的属性根本就没有“告诉”序列化函数去处理,自然而然值就丢失了,于是修改函数如下:
OK,一切搞定了
1

2
文件描述13

14
修改记录21

22
using System;23
using System.Data;24
using System.Text;25
using System.Runtime.Serialization;26

27
namespace Colorful.Model28
{29
/// <summary>30
/// 数据基本表31
/// </summary>32
[Serializable]33
public class BaseModel : DataTable34
{35
protected int index; //记录当前行36
protected int pageSize; //每页记录数37
protected int currentPage; //当前页码38
protected int pages; //总页数39
protected long totalRecord; //总记录数40
protected string description; //其他描述,及其辅助功能41

42
public int PageSize54

55
public int CurrentPage67

68
public int Pages80

81
public long TotalRecord93

94
public string Description106

107
public string GUID128

129
130

131
public BaseModel()149

150
public bool MoveNext()166

167
public bool MovePre()183

184
public bool GoToRow(int rowIndex)202

203
public bool GoToFirst()220

221
public bool GoToLast()238

239
#region public void Insert()240
// -----------------------------------------------------------------------------------------241
/// <summary>242
/// 插入空行,并把空行当作当前行243
/// </summary>244
public void Insert()245
{246
Rows.Add(NewRow());247
index = Rows.Count - 1;248
}249
// -----------------------------------------------------------------------------------------250
#endregion251

252
public void Delete()270

271
}272
}273

1
protected BaseModel(SerializationInfo info, StreamingContext context) : base(info, context)
13
14
#region public override void GetObjectData(SerializationInfo info, StreamingContext context)
15
// -----------------------------------------------------------------------------------------
16
/// <summary>
17
/// 序列化函数
18
/// </summary>
19
/// <param name="info">序列化所需的全部数据</param>
20
/// <param name="context">目标描述</param>
21
public override void GetObjectData(SerializationInfo info, StreamingContext context):base.GetObjectData(info, context)
22
{
23
}
24
// -----------------------------------------------------------------------------------------
25
#endregion
protected BaseModel(SerializationInfo info, StreamingContext context) : base(info, context)13

14
#region public override void GetObjectData(SerializationInfo info, StreamingContext context)15
// -----------------------------------------------------------------------------------------16
/// <summary>17
/// 序列化函数18
/// </summary>19
/// <param name="info">序列化所需的全部数据</param>20
/// <param name="context">目标描述</param>21
public override void GetObjectData(SerializationInfo info, StreamingContext context):base.GetObjectData(info, context)22
{23
}24
// -----------------------------------------------------------------------------------------25
#endregion结果编译,没有任何错误,但是类中的属性(pageSize等)值却获取不到,想了很久,发现其实道理跟前面有些类似,因为自己加入的属性根本就没有“告诉”序列化函数去处理,自然而然值就丢失了,于是修改函数如下:
1
#region protected BaseModel(SerializationInfo info, StreamingContext context) : base(info, context)
2
// -----------------------------------------------------------------------------------------
3
/// <summary>
4
/// 反序列化构造函数
5
/// </summary>
6
/// <param name="si">反序列化所需的全部数据</param>
7
/// <param name="context">目标描述</param>
8
protected BaseModel(SerializationInfo info, StreamingContext context) : base(info, context)
9
{
10
index = info.GetInt32("index");
11
pageSize = info.GetInt32("pageSize");
12
currentPage = info.GetInt32("currentPage");
13
pages = info.GetInt32("pages");
14
totalRecord = info.GetInt64("totalRecord");
15
description = info.GetString("description");
16
}
17
// -----------------------------------------------------------------------------------------
18
#endregion
19
20
#region public override void GetObjectData(SerializationInfo info, StreamingContext context)
21
// -----------------------------------------------------------------------------------------
22
/// <summary>
23
/// 序列化函数
24
/// </summary>
25
/// <param name="info">序列化所需的全部数据</param>
26
/// <param name="context">目标描述</param>
27
public override void GetObjectData(SerializationInfo info, StreamingContext context)
28
{
29
info.AddValue("index", index);
30
info.AddValue("pageSize", pageSize);
31
info.AddValue("currentPage", currentPage);
32
info.AddValue("pages", pages);
33
info.AddValue("totalRecord", totalRecord);
34
info.AddValue("description", description);
35
base.GetObjectData(info, context);
36
}
37
// -----------------------------------------------------------------------------------------
38
#endregion
#region protected BaseModel(SerializationInfo info, StreamingContext context) : base(info, context)2
// -----------------------------------------------------------------------------------------3
/// <summary>4
/// 反序列化构造函数5
/// </summary>6
/// <param name="si">反序列化所需的全部数据</param>7
/// <param name="context">目标描述</param>8
protected BaseModel(SerializationInfo info, StreamingContext context) : base(info, context)9
{10
index = info.GetInt32("index");11
pageSize = info.GetInt32("pageSize");12
currentPage = info.GetInt32("currentPage");13
pages = info.GetInt32("pages");14
totalRecord = info.GetInt64("totalRecord");15
description = info.GetString("description");16
}17
// -----------------------------------------------------------------------------------------18
#endregion19

20
#region public override void GetObjectData(SerializationInfo info, StreamingContext context)21
// -----------------------------------------------------------------------------------------22
/// <summary>23
/// 序列化函数24
/// </summary>25
/// <param name="info">序列化所需的全部数据</param>26
/// <param name="context">目标描述</param>27
public override void GetObjectData(SerializationInfo info, StreamingContext context)28
{29
info.AddValue("index", index);30
info.AddValue("pageSize", pageSize);31
info.AddValue("currentPage", currentPage);32
info.AddValue("pages", pages);33
info.AddValue("totalRecord", totalRecord);34
info.AddValue("description", description);35
base.GetObjectData(info, context);36
}37
// -----------------------------------------------------------------------------------------38
#endregionOK,一切搞定了


浙公网安备 33010602011771号