[code=C# SaveFileDialog sfd = new SaveFileDialog();
            sfd.Filter = "(*.dat)|*.dat";
            sfd.FileName = "MyObject.dat";
            if(sfd.ShowDialog ()== DialogResult .OK )
            {
                ArrayList saveData = new ArrayList ( List);//List 是个arraylist类型,里面保存着shape类的对象
//shape类里有成员pen,brush,font。是个图形的基类
                FileStream stream = new FileStream("MyObject.dat", FileMode.Create, FileAccess.Write);
                {
                    BinaryFormatter formater = new BinaryFormatter();
                    formater.Serialize(stream, saveData);
                    stream.Close();
                    MessageBox.Show("保存成功.");
                }
            }][/code]
运行错误,说pen,brush,font未能序列化?我在shape类前面已经加了[Serializable]。只要把Pen,brush,font成员前面加上N[NOSerializable]就不会报错?
为什么? 有什么解决办法?

解决方案 »

  1.   

    SaveFileDialog sfd = new SaveFileDialog();
      sfd.Filter = "(*.dat)|*.dat";
      sfd.FileName = "MyObject.dat";
      if(sfd.ShowDialog ()== DialogResult .OK )
      {
      ArrayList saveData = new ArrayList ( List);//List 是个arraylist类型,里面保存着shape类的对象
    //shape类里有成员pen,brush,font。是个图形的基类
      FileStream stream = new FileStream("MyObject.dat", FileMode.Create, FileAccess.Write);
      {
      BinaryFormatter formater = new BinaryFormatter();
      formater.Serialize(stream, saveData);
      stream.Close();
      MessageBox.Show("保存成功.");
      }
      }
    运行错误,说pen,brush,font未能序列化?我在shape类前面已经加了[Serializable]。只要把Pen,brush,font成员前面加上N[NOSerializable]就不会报错?
    为什么? 有什么解决办法?
      

  2.   

    pen,brush,font对象不要放到shape类里,你可以把他们对应的值放进去,然后反序列化时根据这些值来生成pen,brush,font对象比方说
    System.Drawing.Brush brush = new System.Drawing.SolidBrush(System.Drawing.Color.Blue);别保存brush,保存System.Drawing.Color.Blue,反序列化时在根据System.Drawing.Color.Blue生成brush
      

  3.   

    shape类发出来看下
    应该是shape类的问题
      

  4.   


    public class MMShape
        {
            [NonSerialized ]
            public Pen pen = new Pen(Color.Black, 1);
            [NonSerialized]
            public Brush sBrush = new SolidBrush(Color.SkyBlue);
            [NonSerialized]
            public Font f = new Font("Arial", 10);
            [NonSerialized]
            public SolidBrush fontBrush = new SolidBrush(Color.Black);
            public ArrayList Lines = new ArrayList();
            public virtual void Drawing(Graphics g) { }
            public virtual void Move(params Point[] point) { }
            public virtual void SetSize(Size size) { }
        }
      

  5.   

    自定义序列化,实现ISerialize接口
      

  6.   

    Pen等gdi方法类不支持序列化,加[Serializable]也没用
      

  7.   

    不错,10楼说的不错。pen类不支持序列化
    也不可以继承