和大神学习序列化和反序列化有意向教学的请在贴下留言留下联系方式····

解决方案 »

  1.   

    搜索BinaryFormatter类即可。
      

  2.   

            ''' <summary>
            ''' 序列化.
            ''' </summary>
            ''' <typeparam name="T"></typeparam>
            ''' <param name="Obj"></param>
            ''' <returns></returns>
            Public Shared Function Serialize(Of T)(Obj As T) As Byte()
                Dim restVal() As Byte
                Using memStream As MemoryStream = New MemoryStream(128 * 1024)
                    Dim brFormatter As BinaryFormatter = New BinaryFormatter  '//IFormatter
                    brFormatter.Serialize(memStream, Obj)
                    memStream.Flush()
                    restVal = memStream.ToArray()
                End Using
                Return restVal
            End Function        ''' <summary>
            ''' 反序列化.
            ''' </summary>
            ''' <typeparam name="T"></typeparam>
            ''' <param name="ObjByte"></param>
            ''' <returns></returns>
            Public Shared Function DecSerialize(Of T)(ObjByte() As Byte) As T
                Dim restObj As T
                Using memStream As MemoryStream = New MemoryStream(ObjByte)
                    Dim brFormatter As BinaryFormatter = New BinaryFormatter
                    restObj = CType(brFormatter.Deserialize(memStream), T)
                End Using
                Return restObj
            End Function
      

  3.   

    NET里的序列化能用,但性能不太好,体积也比较大.你可以手工序列化或使用 谷歌,facbook 等公司都有开源的序列化.
      

  4.   

    楼主要求,最好使用 SQLITE/ LEVELDB 保存数据库. KEY =控件名 , VALUE=序列化结果.
    如果是轻量化,可以使用 INI 文件, 控件名=BASE64后的序列化结果.
      

  5.   

    添加引用,System.Runtime.Serialization
    using System.Runtime.Serialization.Json;
    using System.IO;
    using System.Xml.Serialization;
    using System.Xml;
    using System.Runtime.Serialization.Formatters.Binary;public class Serializer
    {
        /// 将对象序列化为json文件
        public static void ObjectToJson<T>(T t, string path) where T : class
        {
            DataContractJsonSerializer formatter = new DataContractJsonSerializer(typeof(T));
            using (FileStream stream = new FileStream(path, FileMode.OpenOrCreate))
            {
                formatter.WriteObject(stream, t);
            }
        }    /// 将对象序列化为json字符串
        public static string ObjectToJson<T>(T t) where T : class
        {
            DataContractJsonSerializer formatter = new DataContractJsonSerializer(typeof(T));
            using (MemoryStream stream = new MemoryStream())
            {
                formatter.WriteObject(stream, t);
                string result = System.Text.Encoding.UTF8.GetString(stream.ToArray());
                return result;
            }
        }    /// json字符串转成对象
        public static T JsonToObject<T>(string json) where T : class
        {
            DataContractJsonSerializer formatter = new DataContractJsonSerializer(typeof(T));
            using (MemoryStream stream = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(json)))
            {
                T result = formatter.ReadObject(stream) as T;
                return result;
            }
        }    /// 将对象序列化为xml文件
        public static void ObjectToXml<T>(T t, string path) where T : class
        {
            XmlSerializer formatter = new XmlSerializer(typeof(T));
            using (FileStream stream = new FileStream(path, FileMode.OpenOrCreate))
            {
                formatter.Serialize(stream, t);
            }
        }    /// 将对象序列化为xml字符串
        public static string ObjectToXml<T>(T t) where T : class
        {
            XmlSerializer formatter = new XmlSerializer(typeof(T));
            using (MemoryStream stream = new MemoryStream())
            {
                formatter.Serialize(stream, t);
                string result = System.Text.Encoding.UTF8.GetString(stream.ToArray());
                return result;
            }
        }    /// 将xml文件反序列化为对象
        public static T XmlToObject<T>(T t, string path) where T : class
        {
            XmlSerializer formatter = new XmlSerializer(typeof(T));
            using (FileStream stream = new FileStream(path, FileMode.OpenOrCreate))
            {
                XmlReader xmlReader = new XmlTextReader(stream);
                T result = formatter.Deserialize(xmlReader) as T;
                return result;
            }
        }    /// 将xml字符串反序列化为对象
        public static T XmlStrToObject<T>(T t, string str) where T : class
        {
            XmlSerializer formatter = new XmlSerializer(typeof(T));        StringReader xmlReader = new StringReader(str);
            T result = formatter.Deserialize(xmlReader) as T;
            return result;
        }
        /// 将对象序列化为二进制流
        public static byte[] ObjectToString<T>(T t)
        {
            BinaryFormatter formatter = new BinaryFormatter();
            using (MemoryStream stream = new MemoryStream())
            {
                formatter.Serialize(stream, t);
                byte[] result = stream.ToArray();
                return result;
            }
        }    /// 将二进制流反序列为类型
        public static T StringToObject<T>(byte[] bytes) where T : class
        {
            BinaryFormatter formatter = new BinaryFormatter();
            using (MemoryStream stream = new MemoryStream(bytes, 0, bytes.Length))
            {
                T result = formatter.Deserialize(stream) as T;
                return result;
            }
        }    /// 将对象序列化为文件
        public static void ObjectToFile<T>(T t, string path)
        {
            BinaryFormatter formatter = new BinaryFormatter();
            using (FileStream stream = new FileStream(path, FileMode.OpenOrCreate))
            {
                formatter.Serialize(stream, t);
                stream.Flush();
            }
        }    /// 将文件反序列化为对象
        public static T FileToObject<T>(string path) where T : class
        {
            using (FileStream stream = new FileStream(path, FileMode.Open))
            {
                BinaryFormatter formatter = new BinaryFormatter();
                T result = formatter.Deserialize(stream) as T;
                return result;
            }
        }
    }
      

  6.   

    我用的 BinaryFormatter序列化数据后写入指定的文件,可是关闭后,再打开再写入的时候就会将之前的文件覆盖掉,致使文件中的内容丢失,变成了新写入的内容,该如何写入才能在原内容后面直接追加,而不丢失原来的内容呢?
      

  7.   

    感觉你应该用 SQLITE/ LEVELDB  保存. 
      

  8.   

    感觉你应该用 SQLITE/ LEVELDB  保存. 
    谢谢您,我主要想保存在文件中,有什么办法嘛?
      

  9.   

    工具 => NUGET => 管理解决方案的 NUGET 程序包 => 搜 LEVELDB或SQLITE .
    然后网上找 LEVELDB或SQLITE 的代码即可.