System.Drawing.Font font1 = new Font("宋体",9);
Byte[] bytes = HFSoft.Serialization.Serializable.SerializeObject(font1);
System.Drawing.Font font2 = HFSoft.Serialization.Serializable.DeserializeObject(bytes) as System.Drawing.Font;
MessageBox.Show(this,font2.Name);
这是我做的,没有问题。

解决方案 »

  1.   

    /// <summary>
    /// 把对象序列化并返回相应的字节
    /// </summary>
    /// <param name="pObj">需要序列化的对象</param>
    /// <returns>byte[]</returns>
    public static byte[] SerializeObject(object pObj)
    {
    if(pObj == null)
    return null;
    System.IO.MemoryStream _memory = new System.IO.MemoryStream();
    BinaryFormatter formatter = new BinaryFormatter();
    formatter.Serialize(_memory,pObj);
    _memory.Position = 0;
    byte[] read = new byte[_memory.Length];
    _memory.Read(read,0,read.Length);
    _memory.Close();
    return read;
    }
    public static void SerializeObject(object pObj,string pFileName)
    {
    System.IO.FileStream stream = System.IO.File.Open(pFileName,System.IO.FileMode.Create,System.IO.FileAccess.Write);
    byte[] bytes = SerializeObject(pObj);
    stream.Write(bytes,0,bytes.Length);
    stream.Flush();
    stream.Close();
    }
    public static object DeserializeObject(string pFileName)
    {
    System.IO.FileStream stream = System.IO.File.Open(pFileName,System.IO.FileMode.Open,System.IO.FileAccess.Read);
    byte[] bytes = new byte[stream.Length];
    stream.Read(bytes,0,bytes.Length);
    stream.Close();
    return DeserializeObject(bytes);
    }
    /// <summary>
    /// 把字节反序列化成相应的对象
    /// </summary>
    /// <param name="pBytes">字节流</param>
    /// <returns>object</returns>
    public static object DeserializeObject(byte[] pBytes)
    {
    object _newOjb = null;
    if(pBytes == null)
    return _newOjb;
    System.IO.MemoryStream _memory = new System.IO.MemoryStream(pBytes);
    _memory.Position = 0;
    BinaryFormatter formatter = new BinaryFormatter();
    _newOjb = formatter.Deserialize(_memory);
    _memory.Close();
    return _newOjb;
    }
    以上是那几个方法
      

  2.   

    henryfan1(每天好心情(*_*)) :
       你的序列化类是C#提供的吗?如果不是,是否可以提供代码呢? 谢谢
      

  3.   

    自己封装一下就可以方便使用了
    using System;
    using System.Runtime.Serialization.Formatters.Binary;
    using System.Runtime.Serialization;
    namespace HFSoft.Serialization
    {
    /// <summary>
    /// 对象序列化对象类
    /// </summary>
    public class Serializable
    {
    private Serializable()
    {
    //
    // TODO: 在此处添加构造函数逻辑
    //
    }
    /// <summary>
    /// 把对象序列化并返回相应的字节
    /// </summary>
    /// <param name="pObj">需要序列化的对象</param>
    /// <returns>byte[]</returns>
    public static byte[] SerializeObject(object pObj)
    {
    if(pObj == null)
    return null;
    System.IO.MemoryStream _memory = new System.IO.MemoryStream();
    BinaryFormatter formatter = new BinaryFormatter();
    formatter.Serialize(_memory,pObj);
    _memory.Position = 0;
    byte[] read = new byte[_memory.Length];
    _memory.Read(read,0,read.Length);
    _memory.Close();
    return read;
    }
    public static void SerializeObject(object pObj,string pFileName)
    {
    System.IO.FileStream stream = System.IO.File.Open(pFileName,System.IO.FileMode.Create,System.IO.FileAccess.Write);
    byte[] bytes = SerializeObject(pObj);
    stream.Write(bytes,0,bytes.Length);
    stream.Flush();
    stream.Close();
    }
    public static object DeserializeObject(string pFileName)
    {
    System.IO.FileStream stream = System.IO.File.Open(pFileName,System.IO.FileMode.Open,System.IO.FileAccess.Read);
    byte[] bytes = new byte[stream.Length];
    stream.Read(bytes,0,bytes.Length);
    stream.Close();
    return DeserializeObject(bytes);
    }
    /// <summary>
    /// 把字节反序列化成相应的对象
    /// </summary>
    /// <param name="pBytes">字节流</param>
    /// <returns>object</returns>
    public static object DeserializeObject(byte[] pBytes)
    {
    object _newOjb = null;
    if(pBytes == null)
    return _newOjb;
    System.IO.MemoryStream _memory = new System.IO.MemoryStream(pBytes);
    _memory.Position = 0;
    BinaryFormatter formatter = new BinaryFormatter();
    _newOjb = formatter.Deserialize(_memory);
    _memory.Close();
    return _newOjb;
    }
    }
    }
      

  4.   

    Font类我用的是SOAPFORMAT,XMLSERIALIZE()这两种方法的序列化,结果出现了问题,后来得到henryfan1(每天好心情(*_*)) 的指点,用了BinaryFormat方法进行序列化,就可以了,还是不明白原因(是MS的问题吧)