博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#序列化多个对象到单个文件
阅读量:7103 次
发布时间:2019-06-28

本文共 3605 字,大约阅读时间需要 12 分钟。

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

//测试用于保存的类   [Serializable] class TestToSerizable    {        public int i;        public 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);         }     }

 

  运行结果:

  

  

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

  以上

转载于:https://www.cnblogs.com/zhang-ming/p/3793213.html

你可能感兴趣的文章
第三次作业
查看>>
C#细节忽略的问题:int 与 int?
查看>>
Ubuntu 安装 uget
查看>>
VC++技术内幕(二)
查看>>
我们做微信二次开发的意义
查看>>
matlab练习程序(PSNR)
查看>>
Debian出现in the drive ‘/media/cdrom/’ and press enter解决办法
查看>>
SkRefCnt
查看>>
1.把一个字符串内的正整数相加
查看>>
日记(二)
查看>>
list,tuple,set,dict基础
查看>>
PIC中的#pragma idata 和#pragma udata
查看>>
使用FileAudit在Windows服务器上实现最优文件访问监控
查看>>
mysql 远程连接数据库的二种方法
查看>>
一步一步学android OpenGL ES2.0编程(4)
查看>>
corosync 源代码分析1
查看>>
寻找Cydia里面软件安装包deb文件的真实下载地址
查看>>
如何收缩日志文件
查看>>
解决Excel打开UTF-8编码的CSV文件乱码的问题
查看>>
Powershell invoke-command vs -computerName 效率比较
查看>>