• 多种序列化器-指定类对象


    序列化类对象

    namespace IOSerialize.Serialize

    {

    [Serializable]  //必须添加序列化特性

    public class Person

    {

    [NonSerialized]

    public int Id = 1;

    public string Name { get; set; }

    public string Sex { get; set; }

    }

    [Serializable]  //必须添加序列化特性

    public class Programmer : Person

    {

    private string Language { get; set; }//编程语言

    public string Description { get; set; }

    }

    }

    --------------------------------------------------------------------------

    public class SerializeHelper

    {

    private static string CurrentDataPath = ConfigurationManager.AppSettings["CurrentDataPath"];

    /// <summary>

    /// 二进制序列化器

    /// </summary>

    public static void BinarySerialize()

    {

    //使用二进制序列化对象

    string fileName = Path.Combine(CurrentDataPath, @"BinarySerialize.txt");//文件名称与路径

    using (Stream fStream = new FileStream(fileName, FileMode.Create, FileAccess.ReadWrite))

    {//需要一个stream,这里是直接写入文件了

    List<Programmer> pList = DataFactory.BuildProgrammerList();

    BinaryFormatter binFormat = new BinaryFormatter();//创建二进制序列化器

    binFormat.Serialize(fStream, pList);

    }

    using (Stream fStream = new FileStream(fileName, FileMode.Open, FileAccess.ReadWrite))

    {//需要一个stream,这里是来源于文件

    BinaryFormatter binFormat = new BinaryFormatter();//创建二进制序列化器

    //使用二进制反序列化对象

    fStream.Position = 0;//重置流位置

    List<Programmer> pList = (List<Programmer>)binFormat.Deserialize(fStream);//反序列化对象

    }

    }

    /// <summary>

    /// soap序列化器

    /// </summary>

    public static void SoapSerialize()

    {

    //使用Soap序列化对象

    string fileName = Path.Combine(CurrentDataPath, @"SoapSerialize.txt");//文件名称与路径

    using (Stream fStream = new FileStream(fileName, FileMode.Create, FileAccess.ReadWrite))

    {

    List<Programmer> pList = DataFactory.BuildProgrammerList();

    SoapFormatter soapFormat = new SoapFormatter();//创建二进制序列化器

    //soapFormat.Serialize(fStream, list);//SOAP不能序列化泛型对象

    soapFormat.Serialize(fStream, pList.ToArray());

    }

    using (Stream fStream = new FileStream(fileName, FileMode.Open, FileAccess.ReadWrite))

    {

    SoapFormatter soapFormat = new SoapFormatter();//创建二进制序列化器

    //使用二进制反序列化对象

    fStream.Position = 0;//重置流位置

    List<Programmer> pList = ((Programmer[])soapFormat.Deserialize(fStream)).ToList();//反序列化对象

    }

    }

    //BinaryFormatter序列化自定义类的对象时,序列化之后的流中带有空字符,以致于无法反序列化,反序列化时总是报错“在分析完成之前就遇到流结尾”(已经调用了stream.Seek(0, SeekOrigin.Begin);)。

    //改用XmlFormatter序列化之后,可见流中没有空字符,从而解决上述问题,但是要求类必须有无参数构造函数,而且各属性必须既能读又能写,即必须同时定义getter和setter,若只定义getter,则反序列化后的得到的各个属性的值都为null。

    /// <summary>

    /// XML序列化器

    /// </summary>

    public static void XmlSerialize()

    {

    //使用XML序列化对象

    string fileName = Path.Combine(CurrentDataPath, @"Student.xml");//文件名称与路径

    using (Stream fStream = new FileStream(fileName, FileMode.Create, FileAccess.ReadWrite))

    {

    List<Programmer> pList = DataFactory.BuildProgrammerList();

    XmlSerializer xmlFormat = new XmlSerializer(typeof(List<Programmer>));//创建XML序列化器,需要指定对象的类型

    xmlFormat.Serialize(fStream, pList);

    }

    using (Stream fStream = new FileStream(fileName, FileMode.Open, FileAccess.ReadWrite))

    {

    XmlSerializer xmlFormat = new XmlSerializer(typeof(List<Programmer>));//创XML序列化器,需要指定对象的类型

    //使用XML反序列化对象

    fStream.Position = 0;//重置流位置

    List<Programmer> pList = pList = (List<Programmer>)xmlFormat.Deserialize(fStream);

    }

    }

    /// <summary>

    /// Json序列化器

    /// </summary>

    public static void Json()

    {

    List<Programmer> pList = DataFactory.BuildProgrammerList();

    string result = JsonHelper.ObjectToString<List<Programmer>>(pList);

    List<Programmer> pList1 = JsonHelper.StringToObject<List<Programmer>>(result);

    }

    }

  • 相关阅读:
    自定义构造函数的原型对象及原型链
    css 结构伪类选择器
    JavaScript的普通函数,箭头函数作用域的区别
    javascript 集合 交集 并集 差集
    es6 生成器
    css 清除浮动的方式
    JavaScript原型对象动态性
    css 列表样式,<a> 连接文字超长省略
    css 块级样式 浮动(float) 与转为 display = inlineblock区别
    使用war包安装jenkins
  • 原文地址:https://www.cnblogs.com/anyihen/p/12773243.html
Copyright © 2020-2023  润新知