序列化实例

这个例子是把一个Gif的图像序列化,所谓序列化,就是把一种类型转换成另一种类型(一般是一个字符串)
我们也可以序列化自定义的类型,只不过我这里是用System.Drawing.Imaging.ImageFormat.Gif类型来代替了。
 
我写的这个类叫ImageConverter.cs,它有两个方法。
 
第一个用于转换Image到byte[] 数组:
 

        /// <summary>
        /// 序列化系统消息,从一个SnmonMessage类型到string类型
        /// </summary>
        /// <param name="systemMeg">即将要反序列化的系统消息,从这个string类型中得到一个SnmonMessage</param>
        public static string ToSerialize(Message systemMeg)
        {
            //创建一个xml序列化对象
            System.Xml.Serialization.XmlSerializer xsl = new System.Xml.Serialization.XmlSerializer(typeof(Message));
            //创建一个内存流对象
            MemoryStream memoryStream = new MemoryStream();
            //将传入的systemMeg转换成一个内存流,保存在xsl序列化对象中
            xsl.Serialize(memoryStream, systemMeg);
            //将这个转化好的序列化转换为string类型输出
            return Convert.ToBase64String(memoryStream.ToArray());
        }

        /// <summary>
        /// 反序列化系统消息,从一个string类型到SnmonMessage类型
        /// </summary>
        /// <param name="systemMeg">即将要序列化的系统消息</param>
        public static SnmonMessage DeSerialize(string systemMeg)
        {
            //创建一个xml序列化对象
            System.Xml.Serialization.XmlSerializer xsl = new System.Xml.Serialization.XmlSerializer(typeof(Message));
            //序列化一个内存流
            MemoryStream ms = new MemoryStream(Convert.FromBase64String(systemMeg));
            //将从序列化中得到的对象返回
            return (Message)xsl.Deserialize(ms);
        }
    }

    /// <summary>
    /// 图像和比特流之间的相互转换
    /// </summary>
    public class ImageByteSwitch
    {
        /// <summary>
        /// 将图像转化换为比特数组
        /// </summary>
        /// <param name="imageIn">输入的图像(目前仅限于Jpeg格式的转换)</param>
        /// <returns>一个byte数组</returns>
        public static byte[] ImageToByteArray(System.Drawing.Image imageIn)
        {
            MemoryStream ms = new MemoryStream();
            imageIn.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
            return ms.ToArray();
        }

        /// <summary>
        /// 将一个比特数组转换为一个图像
        /// </summary>
        /// <param name="byteArrayIn">要转换为图像的比特数组</param>
        /// <returns>由比特数组转换出来的图像</returns>
        public static Image ByteArrayToImage(byte[] byteArrayIn)
        {
            MemoryStream ms = new MemoryStream(byteArrayIn);
            Image returnImage = Image.FromStream(ms);
            return returnImage;
        }
    }
}

posted @ 2009-04-28 15:35  YoKing  阅读(717)  评论(0编辑  收藏  举报