类对象序列化(反序列化)成xml文件或者二进制文件到本地文件方法

    技术2022-05-20  35

    以前序列化实体对象到本地文件时,总要写一大堆xml语句来构建xml,偶然发现还可以用系统提供的方法来实现。并且还有序列化成二进制的方法。本人整理和归纳了一下,xml序列化和反序列化,二进制序列化和反序列化可以用下来的方法来实现:

     

    /// <summary> /// 将类的对象序列化后保存到本地xml文件 /// </summary> /// <param name="entityObj">一个对象</param> /// <param name="fileName">本地xml文件路径</param> public void XmlSerialize(object entityObj, string fileName) { using (System.IO.FileStream stream = new System.IO.FileStream(fileName, System.IO.FileMode.Create)) { System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(entityObj.GetType()); serializer.Serialize(stream, entityObj); } } /// <summary> /// 读取序列化后保存在本地的xml文件成一个对象 /// </summary> /// <param name="filename"></param> /// <param name="entityType"></param> /// <returns></returns> public object XmlDeserialize(string filename, Type entityType) { object obj = null; using (System.IO.FileStream stream = new System.IO.FileStream(filename, System.IO.FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.Read)) { System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(entityType); obj = serializer.Deserialize(stream); } return obj; } /// <summary> /// 将对象序列化成二进制文件保存到本地 /// </summary> /// <param name="obj">对象</param> /// <param name="fileName">二进制文件路径</param> public static void BinSerialize(object obj, string fileName) { using (System.IO.Stream strm = new System.IO.FileStream(fileName, System.IO.FileMode.OpenOrCreate, System.IO.FileAccess.Write, System.IO.FileShare.None)) { System.Runtime.Serialization.IFormatter fmt = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter(); fmt.Serialize(strm, obj); strm.Flush(); } } /// <summary> /// 将序列化的二进制文件反序列化成一个对象 /// </summary> /// <param name="fileName"></param> /// <returns></returns> public static object BinDeserialize(string fileName) { object obj = null; using (System.IO.Stream strm = new System.IO.FileStream(fileName, System.IO.FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.None)) { System.Runtime.Serialization.IFormatter fmt = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter(); obj = fmt.Deserialize(strm); } return obj; }

    对于要序列化成二进制文件的实体类,必须在实体类定义时加一个[Serializable]属性:

    [Serializable] public class Person { public String Name {get;set;} public Image Photo {get;set;} }

     

     

    对于要序列化成xml文件的实体类,如果其中有些属性不想序列化,则在类里相应的属性上面加一个属性,如,不想序列化Person类的Photo属性可以加一个[System.Xml.Serialization.XmlIgnore]属性:

    public class Person { public String Name {get;set;} [System.Xml.Serialization.XmlIgnore] public Image Photo {get;set;} }

     


    最新回复(0)