[Serializable]
    public class MySerialClass
    {
        public MySerialClass()
        {        }
        public List<Maker> AllMakers
        {
            get;
            set;
        }
        public Book Book
        {
            get;
            set;
        }
    }
    public class Book
    {
        public string name;
        public Maker maker;
        public Book()
        { 
        }
        public Book(string name,Maker maker)
        {
            this.name = name;
            this.maker = maker;
        }
    }
    [Serializable]
    public class Maker
    {
        public string name;
        public Maker()
        { 
        }
        public Maker(string name)
        {
            this.name = name;
        }
    }以上是序列化的类string strFile = "c:\\MySerialClass.xml";        public void Serialize(MySerialClass mc)
        {
            using (FileStream fs = new FileStream(strFile, FileMode.Create))
            {
                XmlSerializer formatter = new XmlSerializer(typeof(MySerialClass));
                formatter.Serialize(fs, mc);
            }
        }        public MySerialClass DeSerialize()
        {
            MySerialClass mc;
            using (FileStream fs = new FileStream(strFile, FileMode.Open))
            {
                XmlSerializer formatter = new XmlSerializer(typeof(MySerialClass));
                mc = (MySerialClass)formatter.Deserialize(fs);
            }
            return mc;
        }        private void btn_Save_Click(object sender, EventArgs e)
        {
            //this.graphControl1.Serialize();            MySerialClass mc = new MySerialClass();
            Maker maker = new Maker("m1");
            List<Maker> makerList = new List<Maker>();
            makerList.Add(maker);
            mc.AllMakers = makerList;
            Book b = new Book("b1", makerList[0]);
            mc.Book = b;
            Serialize(mc);
        }        private void btn_ReDraw_Click(object sender, EventArgs e)
        {
            //this.graphControl1.DeSerialize();            MySerialClass mc = DeSerialize();
        }以上是序列化的方法 我的问题是:Book类中的Maker属性引用的是MySerialClass属性AllMakers中的一个对象但是在序列化时保存的是两个对象(我想要实现的保存一个对象,同时有一个对该对象的引用),另外反序列化时只调用一次Maker的构造函数 请指教

解决方案 »

  1.   

    但是在序列化时保存的是两个对象(我想要实现的保存一个对象,同时有一个对该对象的引用),另外反序列化时只调用一次Maker的构造函数创建对象要执行构造函数,创建2个对象调用一次构造函数,这和序列化没关系,估计你需要考虑下自己的设计,为什么要设计一个和基本规则相矛盾的设计。
      

  2.   


    我觉得我的设计应该是没问题的,Book对象中maker是对一个已经存在的对象的引用,这完全符合常规我感觉我的问题归根到底是XmlSerializer是否能实现对某个对象的引用