欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【C#随手记】Xml的序列化与反序列化

程序员文章站 2022-06-16 08:19:26
...

主要用到类:

System.Xml.Serialization命名空间下的XmlSerializer(Xml序列化器)类;
System.Xml命名空间下的XmlTextWriter(Xml文本写入者)类;
System.IO命名空间下的MemoryStream(内存流)类;
System.Text命名空间下的Encoding(编码)类;


完整代码:

public static class XmlSerialization
{
    /// <summary>
    /// 序列化,传入一个类,返回这个类的XML字符串
    /// </summary>
    public static string Seri(object pObject)
    {
        //创建一个目标类型的“xml序列化器”对象
        System.Xml.Serialization.XmlSerializer xs = new System.Xml.Serialization.XmlSerializer(pObject.GetType());
        //创建一个“Xml文本写入”对象,使用内存流、UTF8编码
        System.Xml.XmlTextWriter xmlTextWriter = new System.Xml.XmlTextWriter(new System.IO.MemoryStream(), System.Text.Encoding.UTF8);
        //开始序列化
        xs.Serialize(xmlTextWriter, pObject);
        //序列化完成后,获取比特流
        System.IO.MemoryStream mStream = (System.IO.MemoryStream)xmlTextWriter.BaseStream;
        //比特流转字节组再转成字符串
        return System.Text.Encoding.UTF8.GetString(mStream.ToArray());
    }



    /// <summary>
    /// 反序列化,传入一串XML字符串和类型,返回这个对象
    /// </summary>
    public static T DeSeri<T>(string serializedString) where T : class
    {
        //创建一个目标类型的“xml序列化器”对象
        System.Xml.Serialization.XmlSerializer xs = new System.Xml.Serialization.XmlSerializer(typeof(T));
        //创建一个内存流,将目标字符串转为字节组带入构造函数
        System.IO.MemoryStream mStream = new System.IO.MemoryStream(System.Text.Encoding.UTF8.GetBytes(serializedString));
        //使用 封装好的Deserialize函数,将流转换为对象
        return xs.Deserialize(mStream) as T;
    }
}