zoukankan      html  css  js  c++  java
  • 序列化:反序列化为另一个对象

    将类型Person序列化为文件后,反序列化该文件为另一个类型PersonAnother,以下是相关代码:
     
    using System;
    using System.Runtime.Serialization;

    namespace ConsoleApp_SerializableToAnotherObj
    {
    class Program
    {
    static void Main(string[] args)
    {
    //反序列化为另一个对象
    Person personA=new Person(){FirstName = "Zhang",LastName = "San"};
    BinarySerializer.SerializeToFile(personA,@"c:","person.txt");
    PersonAnother p = BinarySerializer.DeserializeFromFile<PersonAnother>(@"
    c:person.txt");
    Console.WriteLine(p.Name);
    Console.ReadKey();
    }
    }

    [Serializable]
    class PersonAnother : ISerializable
    {
    public string Name { get; set; }

    protected PersonAnother(SerializationInfo info, StreamingContext context)
    {
    Name = info.GetString("
    Name");
    }

    void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context)
    {
    }
    }

    [Serializable]
    class Person : ISerializable
    {
    public string FirstName;
    public string LastName;
    public string ChineseName;

    public Person()
    {
    }
    protected Person(SerializationInfo info, StreamingContext context)
    { }

    void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context)
    {
    info.SetType(typeof(PersonAnother));
    info.AddValue("
    Name", string.Format("{0} {1}", LastName, FirstName));
    }
    }
    }


    工具类:
    using System.IO;
    using System.Runtime.Serialization.Formatters.Binary;

    namespace ConsoleApp_SerializableToAnotherObj
    {
    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;
    }
    }
    }
    }

  • 相关阅读:
    linux ubuntu装机到可实现java(eclipse,intellij IDEA,android)开发全过程
    浅谈线程同步的几种方法
    KMP算法,这是我看到的最简单的最好理解的KMP算法
    常用基础算法C++实现
    堆内存和栈内存详解(转载)
    数据结构=。= 链表
    倒排索引--资料1
    倒排索引简单理解
    简单理解Socket
    8.结构体的使用 2015.12.3
  • 原文地址:https://www.cnblogs.com/jx270/p/3659982.html
Copyright © 2011-2022 走看看