C#序列化多个对象到单个文件

  特定的情况下,可能需要将多个对象保存到文件中。在网上找了一阵,没发现专门说这个问题的。在博问看到了一个相关的问题和回答,整理了一下。以下是我的一个简单实现:

   //测试用于保存的类   [Serializable]    class TestToSerizable
    {
        int i;
        string b;
        public TestToSerizable(int i, string b)
        {
            this.i = i;
            this.b = b;
        }
    }
    class Program
    {

        static void Main(string[] args)
        {
            TestToSerizable testa = new TestToSerizable(1, "testa");
            TestToSerizable testb = new TestToSerizable(2, "testb");
            TestToSerizable testc = new TestToSerizable(3, "testc");
       //序列化保存多个对象
            FileStream fs = new FileStream("DataFile.dat", FileMode.OpenOrCreate);
            BinaryFormatter formatter = new BinaryFormatter();
            formatter.Serialize(fs, testa);
            formatter.Serialize(fs, testb);
            formatter.Serialize(fs, testc);
            fs.Flush();
            fs.Close();
               //逆序列化读取多个对象
            fs = new FileStream("DataFile.dat", FileMode.Open);
            formatter = new BinaryFormatter();
            TestToSerizable a = (TestToSerizable)formatter.Deserialize(fs);
            TestToSerizable b = (TestToSerizable)formatter.Deserialize(fs);
            TestToSerizable c = (TestToSerizable)formatter.Deserialize(fs);
            fs.Close();

Console.WriteLine("a.i=" + a.i + " a.b=" + a.b);
 Console.WriteLine("b.i=" + b.i + " b.b=" + b.b);
 Console.WriteLine("c.i=" + c.i + " c.b=" + c.b);

        }
    }

  运行结果:

  

  进一步,可能会有要保存不同类对象的情况。

  

    [Serializable]
    class TestToSerizableA
    {
        public int i;
        public string b;
        public TestToSerizableA(int i, string b)
        {
            this.i = i;
            this.b = b;
        }
    }
    [Serializable]
    class TestToSerizableB
    {
        public bool a;
        public float b;
        public TestToSerizableB(bool a, float b)
        {
            this.a = a;
            this.b = b;
        }
    }
    class Program
    {

        static void Main(string[] args)
        {
            TestToSerizableA testa = new TestToSerizableA(1, "testa");
            TestToSerizableB testb = new TestToSerizableB(false, 1.23f);
            TestToSerizableA testc = new TestToSerizableA(3, "testc");
            TestToSerizableB testd = new TestToSerizableB(true, 3.14f);

            //交叉保存的不同类型的对象
            FileStream fs = new FileStream("DataFile.dat", FileMode.OpenOrCreate);
            BinaryFormatter formatter = new BinaryFormatter();
            formatter.Serialize(fs, testa);
            formatter.Serialize(fs, testb);
            formatter.Serialize(fs, testc);
            formatter.Serialize(fs, testd);
            formatter.Serialize(fs, 1);//基础类型也可以

            fs.Flush();
            fs.Close();

            //按保存时的顺序读取
            fs = new FileStream("DataFile.dat", FileMode.Open);
            formatter = new BinaryFormatter();
            TestToSerizableA a = (TestToSerizableA)formatter.Deserialize(fs);
            TestToSerizableB b = (TestToSerizableB)formatter.Deserialize(fs);
            TestToSerizableA c = (TestToSerizableA)formatter.Deserialize(fs);
            TestToSerizableB d = (TestToSerizableB)formatter.Deserialize(fs);
            int i = (int)formatter.Deserialize(fs);

            fs.Close();
            Console.WriteLine("a.i=" + a.i + " a.b=" + a.b);
            Console.WriteLine("b.i=" + b.a + " b.b=" + b.b);
            Console.WriteLine("c.i=" + c.i + " c.b=" + c.b);
            Console.WriteLine("d.i=" + d.a + " d.b=" + d.b);
            Console.WriteLine("i=" + i);        }    }

  运行结果:

  

  

  第一次写博客,抛砖引玉,请各位前辈不吝赐教。

  以上

C#序列化多个对象到单个文件

时间: 2024-08-26 09:47:14

C#序列化多个对象到单个文件的相关文章

Python:file/file-like对象方法详解【单个文件读写】

IO中读写文件操作方法汇总!----The_Third_Wave的学习笔记! 本文由@The_Third_Wave(Blog地址:http://blog.csdn.net/zhanh1218)原创.不定期更新,有错误请指正. Sina微博关注:@The_Third_Wave 如果这篇博文对您有帮助,为了好的网络环境,不建议转载,建议收藏!如果您一定要转载,请带上后缀和本文地址. class file(object) |  file(name[, mode[, buffering]]) -> fi

序列化和反序列化:将本地文件中的数据反序列化成实体对象

(1)将本地文件中的数据反序列化成实体对象 (2)将实体对象序列化 .txt中json格式的数据为:{"Name":"张三","Age":20,"Address":"上海市徐汇区"} 第一步: 添加dll引用:Newtonsoft.Json.dll (网上下载一个) using Newtonsoft.Json; 第二步: 新建一个Student实体类: public class Student { publ

在使用Linq to SQL并序列化一个数据对象的时候报System.InvalidOperationException异常,序列化类型XXX的对象时检测到循环引用。

在使用Linq to SQL并序列化一个数据对象的时候报System.InvalidOperationException异常,序列化类型 的对象时检测到循环引用. 异常信息(部分): System.Web.Services.Protocols.SoapException: 服务器无法处理请求. ---> System.InvalidOperationException: 生成 XML 文档时出错. ---> System.InvalidOperationException: 序列化类型 Web

[原创]java WEB学习笔记81:Hibernate学习之路--- 对象关系映射文件(.hbm.xml):hibernate-mapping 节点,class节点,id节点(主键生成策略),property节点

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

hibernate 对象关系映射文件详解

POJO 类和数据库的映射文件*.hbm.xml POJO类和关系数据库之间的映射可以用一个XML文档来定义. 映射文件的扩展名为.hbm.xml 在运行时Hibernate将根据这个映射文件来生成各种SQL语句 通过POJO类的数据库映射文件,Hibernate可以理解持久化类和数据表之间的对应关系,也可以理解持久化类属性与数据库表列之间的对应关系 映射文件说明 hibernate-mapping 类层次:class 主键:id 基本类型:property 实体引用类: many-to-one

腾讯云cos对象存储服务文件上传api就是一个大坑

一.介绍 对象存储服务(Cloud Object Service)是基于腾讯多年海量服务经验,对外提供的可靠.安全.易用的海量存储服务.提供多样化接入方式,以及全国部署的上传加速集群,可以无缝衔接CDN进行加速下载. 二.cos 文件上传api源码 /** * 单个文件上传,适用于小文件 * * @param bucketName * bucket名称 * @param remotePath * 远程文件路径 * @param localPath * 本地文件路径 * @return 服务器端返

XML文件的写,集合XML序列化(写)。XML文件的读,递归遍历

XML文件:必须要有一个节点.检验xml文件,可以用浏览器打开,能打开表示对,否则错. 处理方法: DOM:XmlDocument文档对象模型 Sax(事件驱动,XmlReader) XmlSerializer(序列化):可以序列化一个类,一个泛型集合. Linq to XML:主要用到类:Xelement XDocument XAttribute    using System.Xml.Linq; 写一个XML文件: 学校,班级,学生(性别,年龄,年龄) 1 namespace W_R_XML

JAVA代码实现下载单个文件,和下载打包文件

//下载单个文件调用方法 /**     * response     * imgPath 下载图片地址    * fileName 保存下载文件名称    * @date 2015年4月14日 下午5:53:24     */     public static void download(HttpServletResponse response,String imgPath,String fileName){         OutputStream out=null;         Bu

Java课堂测试——输出单个文件中的前N个最常出现的英语单词

课堂测试一:输出某个英文文本文件中26字母出现的频率,由高到低排列,并显示字母出现的百分比,精确到小数点后面两位. HarryFre.java 1 package demo05; 2 3 import java.io.FileInputStream; 4 import java.io.IOException; 5 import java.io.InputStreamReader; 6 import java.text.DecimalFormat; 7 import java.util.Array