最近项目开发中的传输数据是围绕Remoting而召开的,所以想把所有的数据实体都定义统一的格式,于是就写了一个基于DataTable的基类BaseModal,其他数据实体全部继承于它。此BaseModal基类还包括了一些其他的自有的属性,例如pageSize每页记录数、currentPage当前页码等等,代码如下:
1
2文件描述
13
14修改记录
21
22using System;
23using System.Data;
24using System.Text;
25using System.Runtime.Serialization;
26
27namespace 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
22using System;
23using System.Data;
24using System.Text;
25using System.Runtime.Serialization;
26
27namespace 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
1protected 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
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
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
OK,一切搞定了