zoukankan      html  css  js  c++  java
  • 序列化、反序列化的使用

    调用:

    using System;

    namespace ConsoleApp_Serializable
    {
    class Program
    {
    static void Main(string[] args)
    {
    Person mike = new Person() { Age = 21, Name = "Mike" };
    mike.NameChanged += mike_NameChanged;
    BinarySerializer.SerializeToFile(mike, @"c:", "person.txt");
    Person p = BinarySerializer.DeserializeFromFile<Person>(@"
    c:person.txt");
    p.Name = "
    rose";
    Console.WriteLine(p.Name);
    Console.WriteLine(p.Age.ToString());
    Console.ReadKey();
    }

    static void mike_NameChanged(object sender, EventArgs e)
    {
    Console.WriteLine("
    Name Changed !");
    }
    }

    [Serializable]
    class Person
    {
    private string name;
    public int Age { get; set; }

    public string Name
    {
    get { return name; }
    set
    {
    if (NameChanged != null)
    {
    NameChanged(this, null);
    }
    name = value;
    }
    }

    //事件往往是不需要序列化的,反序列化的环境和序列化的环境往往不一致,这就失去了将事件序列化的意义。
    [field: NonSerialized]
    public event EventHandler NameChanged;
    }
    }
    工具类:
    using System.IO;
    using System.Runtime.Serialization.Formatters.Binary;

    namespace ConsoleApp_Serializable
    {
    public class BinarySerializer
    {
    /// <summary>
    /// 将类型序列化为字符串
    /// </summary>
    public static string Serialize<T>(T t)
    {
    using (MemoryStream stream = new MemoryStream())
    {
    BinaryFormatter formatter = new BinaryFormatter();
    formatter.Serialize(stream, t);
    return System.Text.Encoding.UTF8.GetString(stream.ToArray());
    }
    }

    /// <summary>
    /// 将类型序列化为文件
    /// </summary>
    public static void SerializeToFile<T>(T t, string path, string fullname)
    {
    if (!Directory.Exists(path))
    {
    Directory.CreateDirectory(path);
    }
    string fullPath = string.Format(@"{0}{1}", path, fullname);
    using (FileStream stream = new FileStream(fullPath, FileMode.OpenOrCreate))
    {
    BinaryFormatter formatter = new BinaryFormatter();
    formatter.Serialize(stream, t);
    stream.Flush();
    }
    }

    /// <summary>
    /// 将字符串反序列化为类型
    /// </summary>
    public static TResult Deserialize<TResult>(string s) where TResult : class
    {
    byte[] bs = System.Text.Encoding.UTF8.GetBytes(s);
    using (MemoryStream stream = new MemoryStream(bs))
    {
    BinaryFormatter formatter = new BinaryFormatter();
    return formatter.Deserialize(stream) as TResult;
    }
    }

    /// <summary>
    /// 将文件反序列化为类型
    /// </summary>
    public static TResult DeserializeFromFile<TResult>(string path) where TResult : class
    {
    using (FileStream stream = new FileStream(path, FileMode.Open))
    {
    BinaryFormatter formatter = new BinaryFormatter();
    return formatter.Deserialize(stream) as TResult;
    }
    }
    }
    }


  • 相关阅读:
    【JDK】JDK源码分析-LinkedList
    【JDK】JDK源码-Queue, Deque
    【JDK】JDK源码分析-Vector
    【JDK】JDK源码分析-ArrayList
    Jmeter-安装及配置(一)
    数据库连接池技术
    2017年度总结
    Windows重装系统
    Java + Selenium + Appium手机自动化测试
    DbVisualizer出现下列错误:Could not read XML file
  • 原文地址:https://www.cnblogs.com/jx270/p/3657750.html
Copyright © 2011-2022 走看看