要实现上述类的实例的序列化,可参照如下例子:
        meablock myblock = new meablock();
        // insert code to set properties and fields of the object.
        xmlserializer myserializer = new xmlserializer(typeof(meablock));
        // to write to a file, create a streamwriter object.
        streamwriter mywriter = new streamwriter("myfilename.xml");
        myserializer.serialize(mywriter, meablock);
    需要注意的是xml序列化只会将public的字段保存,对于私有字段不予于保存。
    生成的xml文件格式如下:
        <meablock>
            <caption>test</caption>
        </meablock>
    对于对象的反序列化,则如下:
        meablock myblock;
        // constructs an instance of the xmlserializer with the type
        // of object that is being deserialized.
        xmlserializer myserializer = new xmlserializer(typeof(meablock));
        // to read the file, creates a filestream.
        filestream myfilestream = new filestream("myfilename.xml", filemode.open);
        // calls the deserialize method and casts to the object type.
        myblock = (meablock)myserializer.deserialize(myfilestream)
    2、二进制序列化
        与xml序列化不同的是,二进制序列化可以将类的实例中所有字段(包括私有和公有)都进行序列化操作。这就更方便、更准确的还原了对象的副本。
        要实现上述类的实例的序列化,可参照如下例子:
        meablock myblock = new meablock();
        // insert code to set properties and fields of the object.
        iformatter formatter = new binaryformatter();
        stream stream = new filestream("myfile.bin",filemode.create,fileaccess.write, fileshare.none);
        formatter.serialize(stream, myblock);
        stream.close();
    对于对象的反序列化,则如下:
        iformatter formatter = new binaryformatter();
        stream stream = new filestream("myfile.bin", filemode.open,fileaccess.read, fileshare.read);
        meablock myblock = (meablock) formatter.deserialize(stream);
        stream.close();
三、如何变相实现自定义可视化控件的序列化、反序列化
        对于winform中自定义控件,由于继承于system.windows.form类,而form类又是从marshalbyrefobject继承的,窗体本身无法做到序列化,窗体的实现基于win32下gui资源,不能脱离当前上下文存在。
        当然可以采用变通的方法实现控件的序列化。这里采用的是记忆类模型。
        定义记忆类(其实就是一个可序列化的实体类)用于记录控件的有效属性,需要序列化控件的时候,只需要将该控件的实例copy到记忆类,演变成序列化保存该记忆类的操作。
        反序列化是一个逆过程。将数据流反序列化成为该记忆类,再根据该记忆类的属性生成控件实例。而对于控件的一些事件、方法则可以继续使用。
新闻热点
疑难解答
图片精选