搜索墙首页  编程技术  java  asp  ajax  php  c/c#/c++  数据库  oracle  mysql  db2  操作系统  windows  linux  股吧
首页 > 编程 > C#/C/C++
 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

我在里面讲得已经很清楚了...
 1         
您的发言将按有关规定都会存档,您须为所发表后果负责,请您遵纪守法并注意语言文明。
标题:关于对象实例保存的问题
热门关注
标题回复点击
c# 匿名方法 泛型委托 List<string>101478
我今年28了开始学C#,有前途吗?97539
c++ 输出图像到网页0425
OnServerclick 如何用ctrl+enter提交表单(分不够了)0399
C#技术资料 教程0393
c++ 中使用ChartDirector输出图表的网页0372
各位哪里有下载 Visio 20051370
在C#中如何通过拼IP地址检测某台机器的网络连接是否畅通4338
XPath Example<2>0300
c++ 内存0265
搜索墙@2009 www.pkwall.com all rights reserved QQ:276471788 [京ICP备09111534号]
声明:本站部分数据来源于网络,仅供参考,如有版权问题,请联系我们,我们将及时删除!转载本站请注明来源