首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

c#的序列化解决方法

2013-02-06 
c#的序列化最近学习序列化和反序列化操作,序列化大部分网上是把类序列化了用IO存到一个文件上(比如什么的D

c#的序列化
最近学习序列化和反序列化操作,序列化大部分网上是把类序列化了用IO存到一个文件上(比如什么的DAT,BIN后缀的),或者是序列化成XML。我在网上找到一个序列化成字节的方法可以存到数据库,但是反序列化的时候报错 Exception of type 'System.OutOfMemoryException' was thrown.
代码如下,各位大神帮帮忙

 public void SeralizeNow()
        {
            List<ClassToSeralize> listse = new List<ClassToSeralize>();
            ClassToSeralize cl1 = new ClassToSeralize();
            cl1.id = "1";
            cl1.name = "XXX";
            ClassToSeralize cl2 = new ClassToSeralize();
            cl2.id = "2";
            cl2.name = "XXXN";
            listse.Add(cl1);
            listse.Add(cl2);
            SerializeMethod(listse);
        }
        public void SerializeMethod(List<ClassToSeralize> listPers)
        {
            //序列化
            System.Runtime.Serialization.IFormatter form = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
            Stream st=new MemoryStream();
            form.Serialize(st,listPers);
            st.Flush();
            st.Position=0;
            byte[] bytes=new byte[st.Length];
            st.Read(bytes,0,Convert.ToInt32(st.Length));
            string s = Encoding.ASCII.GetString(bytes);
            st.Close();
            
        }
        public void DeSerializeNow(string s)
        {
            System.Runtime.Serialization.IFormatter formatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
            byte[] bytes = null;
            bytes =Encoding.ASCII.GetBytes(s);
            System.IO.Stream stream = new System.IO.MemoryStream(bytes);
            List<ClassToSeralize> obj = (List<ClassToSeralize>)formatter.Deserialize(stream);
            foreach (ClassToSeralize item in obj)


            {
                Response.Write(item.id);
                Response.Write(item.name);
            }
            stream.Close();
        }



初学序列化,不知道如何学习啊.... 有钱人
[解决办法]
内存溢出,注意释放资源,使用完了 stream 要dispose 
[解决办法]
这里不对

string s = Encoding.ASCII.GetString(bytes); 
Encoding.ASCII.GetBytes(s);

将数据转换为字符串:
string s = string.Join(",", bytes.Select(x => x.ToString("x").PadLeft(2, '0')));
还原
byte[] bytes = s.Split(',').Select(x => (byte)Convert.ToInt32(x, 16)).ToArray(); 

热点排行