解决方案 »

  1.   

    mcls = serializer1.ReadObject(reader, false) as MainClass
    反序列化会自动将二进制数据反序列化成类,并自动创建一个新实例,那么创建了新实例,当然会走一遍构造函数了
      

  2.   

    <?xml version="1.0" encoding="utf-8"?>
    <MainClass xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/TestDeserialization">
      <CL1>
        <BL1>true</BL1>
        <NUM1>1</NUM1>
      </CL1>
      <CL2>
        <NUM2>2</NUM2>
        <STR2>HELLO</STR2>
      </CL2>
    </MainClass>
    我把STR2的内容改成上面后,程序还是打印的Class2string,这样子xml文件有什么用呢?
      

  3.   

    你得在反序列化之后打印mcls的内容啊,不要在初始化的时候打印默认数值
      

  4.   

    DataContractSerializer或者其他XMLSerializer都一样
    都只会调用一次构造函数
    你去掉试试
    [OnDeserializing()]
            public void Initialize(StreamingContext context)
            {
                Initialize();//4
            }
      

  5.   

    额。。是的, 加了这个属性的反序列化函数也可以打出hello
    [OnDeserialized()]
            public void Initialized(StreamingContext context)
            {
                Console.WriteLine(num2);//10
                Console.WriteLine(str2);        }
      

  6.   

    Class1与Class2的构造函数又执行了一遍后,才进行了两个类的反序列化函数,这是为什么呢?
    也就是说反序列化一个类的时候是一定会先执行一遍该类构造函数才执行反序列化函数么?我的意思是说就是因为你加了那段代码才导致的这种现象,实际上只执行一次构造函数的,要不然问题就大了