基本.NET浅串行化
2008-08-12 00:27 Kevin-wang 阅读(243) 评论(0) 收藏 举报
浅串行化:只串行化类的公共字段和属性
公共属性必须是可读且可写的
使用命名空间:using System.Xml.Serialization;
以Book类为例:
串行化模板:
 public void SerializeIt(string filename)
        public void SerializeIt(string filename)
 {
        {
 XmlSerializer serializer = new XmlSerializer(typeof(Book));
            XmlSerializer serializer = new XmlSerializer(typeof(Book));
 StreamWriter writer = new StreamWriter(filename);
            StreamWriter writer = new StreamWriter(filename);
 Book myBook = new Book();
            Book myBook = new Book();

 serializer.Serialize(writer, myBook);
            serializer.Serialize(writer, myBook);
 writer.Close();
            writer.Close();
 }
        }
    
反串行化模板:
 public void DeserializeIt(string filename)
        public void DeserializeIt(string filename)
 {
        {
 XmlSerializer serializer = new XmlSerializer(typeof(Book));
            XmlSerializer serializer = new XmlSerializer(typeof(Book));
 FileStream fs = new FileStream(filename, FileMode.Open);
            FileStream fs = new FileStream(filename, FileMode.Open);
 Book myBook = (Book)serializer.Deserialize(fs);
            Book myBook = (Book)serializer.Deserialize(fs);
 fs.Close();
            fs.Close();
 }
        }
*使用XmlSerializer的类必须有一个不带参数的默认构造函数——在反串行化中使用
*序列化ArrayList类型字段X的特殊处理:在ctor中 this.X = new ArrayList();
*对于引用关系,如果A中引用了B,那么
在序列化A的时候,会生成如下格式的XML:
<A>
<B>xxxxx</B>
</A>
在反序列化A对象的时候,A中也会包含有具体值的B对象
*浅序列化不支持循环引用,即A引用B的同时,B也引用了A
序列化时,将XML格式定制为SOAP格式:使用XmlSerializer构造函数的另一个重载:
 public void SerializeIt(string filename)
        public void SerializeIt(string filename)
 {
        {
 SoapReflectionImporter import = new SoapReflectionImporter();
            SoapReflectionImporter import = new SoapReflectionImporter();
 XmlTypeMapping soapMapping = import.ImportTypeMapping(typeof(Book));
            XmlTypeMapping soapMapping = import.ImportTypeMapping(typeof(Book));

 XmlSerializer serializer = new XmlSerializer(soapMapping);
            XmlSerializer serializer = new XmlSerializer(soapMapping);


 StreamWriter writer = new StreamWriter(filename);
            StreamWriter writer = new StreamWriter(filename);
 Book myBook = new Book();
            Book myBook = new Book();

 serializer.Serialize(writer, myBook);
            serializer.Serialize(writer, myBook);
 writer.Close();
            writer.Close();
 }
        }
公共属性必须是可读且可写的
使用命名空间:using System.Xml.Serialization;
以Book类为例:
串行化模板:
 public void SerializeIt(string filename)
        public void SerializeIt(string filename) {
        { XmlSerializer serializer = new XmlSerializer(typeof(Book));
            XmlSerializer serializer = new XmlSerializer(typeof(Book)); StreamWriter writer = new StreamWriter(filename);
            StreamWriter writer = new StreamWriter(filename); Book myBook = new Book();
            Book myBook = new Book();
 serializer.Serialize(writer, myBook);
            serializer.Serialize(writer, myBook); writer.Close();
            writer.Close(); }
        }反串行化模板:
 public void DeserializeIt(string filename)
        public void DeserializeIt(string filename) {
        { XmlSerializer serializer = new XmlSerializer(typeof(Book));
            XmlSerializer serializer = new XmlSerializer(typeof(Book)); FileStream fs = new FileStream(filename, FileMode.Open);
            FileStream fs = new FileStream(filename, FileMode.Open); Book myBook = (Book)serializer.Deserialize(fs);
            Book myBook = (Book)serializer.Deserialize(fs); fs.Close();
            fs.Close(); }
        }*使用XmlSerializer的类必须有一个不带参数的默认构造函数——在反串行化中使用
*序列化ArrayList类型字段X的特殊处理:在ctor中 this.X = new ArrayList();
*对于引用关系,如果A中引用了B,那么
在序列化A的时候,会生成如下格式的XML:
<A>
<B>xxxxx</B>
</A>
在反序列化A对象的时候,A中也会包含有具体值的B对象
*浅序列化不支持循环引用,即A引用B的同时,B也引用了A
序列化时,将XML格式定制为SOAP格式:使用XmlSerializer构造函数的另一个重载:
 public void SerializeIt(string filename)
        public void SerializeIt(string filename) {
        { SoapReflectionImporter import = new SoapReflectionImporter();
            SoapReflectionImporter import = new SoapReflectionImporter(); XmlTypeMapping soapMapping = import.ImportTypeMapping(typeof(Book));
            XmlTypeMapping soapMapping = import.ImportTypeMapping(typeof(Book));
 XmlSerializer serializer = new XmlSerializer(soapMapping);
            XmlSerializer serializer = new XmlSerializer(soapMapping);

 StreamWriter writer = new StreamWriter(filename);
            StreamWriter writer = new StreamWriter(filename); Book myBook = new Book();
            Book myBook = new Book();
 serializer.Serialize(writer, myBook);
            serializer.Serialize(writer, myBook); writer.Close();
            writer.Close(); }
        } 
                    
                     
                    
                 
                    
                 
        
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号