1
1楼 huangyj 2007-01-23 14:33:09 现在在做一个邮件模板的功能。 已经实现了将HTML文件中包含本地图片的邮件发送给对方的功能。 现在需要将这个HTML文件包含有本地的图片文件的信息保存在数据库中 如何将 MailMessage 对象实例的信息保存在数据库中? 根据数据库保存的内容生成 MailMessage 对象实例发送? 2楼 XphteR 2007-01-23 14:44:35 你可以试试将MailMessage对象序列化为字节,然后保存到数据库中。 3楼 qltouming 2007-01-23 14:53:38 那你得有这样的架构,简而言之: 数据库按MailMessage对象实例建表 业务中需有等同于该表的MailMessage的对象类 再写一个Reader类,完成功能:读取该表中的一行数据便还原成一个实例化的对象。 4楼 huangyj 2007-01-23 15:01:01 请问该如何将对象序列号? 5楼 XphteR 2007-01-23 16:18:26 MSDN上有序列化的主题帮助,你看下就行了。我也刚接触的C#,呵呵。从数据库中将对象字节取出再反序列化即可重显对象。 6楼 huangyj 2007-01-23 17:04:29 比较麻烦呀。 现在专用其它办法了。 7楼 liujia_0421 2007-01-23 20:00:36 将对象先序列化成二进制流,然后保存到数据库中... 需要发送时,再从数据库中取出二进制流,然后反序列化成对象... 8楼 liujia_0421 2007-01-23 20:05:26 //将一个对象序列化成二进制数组 private byte[] SerializeToByte(ArrayList list) { //假如Arraylist为空,则返回null if (list.Count == 0) { return null; } byte[] array = null; try { //定义一个流 Stream stream = new MemoryStream(); //定义一个格式化器 BinaryFormatter bf = new BinaryFormatter(); //将Arraylist中的对象逐一进行序列化 foreach (object obj in list) { bf.Serialize(stream, obj); } array = new byte[stream.Length]; //将二进制流写入数组 stream.Position = 0; stream.Read(array, 0, (int)stream.Length); //关闭流 stream.Close(); } catch (Exception ex) { MessageBox.Show(ex.Message); return null; } return array; } //将一个二进制数组反序列化 private ArrayList DeseralizeToArraylist(byte[] b) { if (b == null || b.Length == 0) { return null; } //定义一个流 MemoryStream stream = new MemoryStream(b); //定义一个格式化器 BinaryFormatter bf = new BinaryFormatter(); ArrayList list = new ArrayList(); while (stream.Position != stream.Length) { list.Add(bf.Deserialize(stream)); } stream.Close(); return list; } 以上两个函数: 一个是将一个对象的列表(一系列对象存储在ArrayList中)中的对象依次序列化成二进制流... 另外一个是将一个二进制数组反序列化成一个对象列表(存储在ArrayList中,返回).. 9楼 liujia_0421 2007-01-23 20:06:15 再举个例子,把我两个月前初学序列化的例子给翻出来了.. 这个是写入文件的,再从文件中反序列化回来,显示.. string fileName = "mutiSerialize.bat "; Person[] personList ={ new Person( "liujia ", 1000), new Person( "liming ", 1500) }; School[] schoolList ={ new School( "001 ", "bjtu "), new School( "002 ", "xitu ") }; //序列化过程开始 IFormatter formatter = new BinaryFormatter(); Stream stream = new FileStream(fileName, FileMode.Create, FileAccess.Write, FileShare.None); //将几个对象序列化到一个文件中 for (int i = 0; i < personList.Length; i++) { formatter.Serialize(stream, personList[i]); } for (int j = 0; j < schoolList.Length; j++) { formatter.Serialize(stream, schoolList[j]); } stream.Close();//序列化完成 //反序列化过程开始 IFormatter formatter11 = new BinaryFormatter(); Stream stream11 = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.None); long lenth11 = stream11.Length; ArrayList list11 = new ArrayList(); while (stream11.Position != lenth11) { list11.Add (formatter11 .Deserialize (stream11 )); } stream11 .Close ();//反序列化过程结束 //显示反序列化结果 foreach (object o in list11) { //判断对象类型,分别进行处理 if (o != null && o.GetType().Name == "School ") { Console.WriteLine( "SchoolId:{0}\tSchoolName:{1} ", ((School)o).SchoolId, ((School)o).SchoolName); } else if (o != null && o.GetType().Name == "Person ") { Console.WriteLine( "Name:{0}\tSalary:{1} ", ((Person)o).Name, ((Person)o).Salary); } } 10楼 liujia_0421 2007-01-23 20:07:15 或者你直接看看这个贴子:
http://community.csdn.net/Expert/topic/5298/5298838.xml?temp=.0739252 我在里面讲得已经很清楚了...
搜索墙@2009 www.pkwall.com all rights reserved QQ:276471788 [京ICP备09111534号]
声明:本站部分数据来源于网络,仅供参考,如有版权问题,请联系我们,我们将及时删除!转载本站请注明来源
| ||||||||||||||||||||||||||||||||||||||||