请教!序列化的问题!

序列化指将一个对象转换成二进制代码?如果既有文本,又有图片和数据表,如何将他们保存到一个文件中?

图片存个路径,然后直接序列化,保存到文件

很难知道你到底想干啥,从你上个帖子我们说你想做word,pdf,epub

但你提问的方式,我只认为你在纠结怎么做个zip,rar

想做word,pdf,epub请先弄明白“文档格式”,如果是这个,我建议你直接上epub把,起码epub是明文的,也不需要你纠结什么序列化,什么某个位置存多少字节

epub简介
https://www.jianshu.com/p/d2edab6750df

他本身就是zip文件,所以你不需要纠结什么在那里写多少字节的问题,zip格式自己描述。
而你需要构建文档,那么请构建那几个xml描述就好

定义类:将文本、图片、数据表都定义为类成员变量。类声明前加“[Serializable]”标记。
实例化对象之后,将对象序列化即可。

//C# 对象序列化
        private static byte[] Serialize(object data)
        {
            BinaryFormatter formatter = new BinaryFormatter();
            MemoryStream rems = new MemoryStream();
            formatter.Serialize(rems, data);
            return rems.GetBuffer();
        }

        //C# 对象反序列化
        private static object Deserialize(byte[] data)
        {
            BinaryFormatter formatter = new BinaryFormatter();
            MemoryStream rems = new MemoryStream(data);
            return formatter.Deserialize(rems);
        }

附验证代码:
using System;
using System.Data;
using System.Drawing;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;

namespace csdnDemo
{
    class Program
    {
        //需要存储的类
        [Serializable]
        class A
        {
            public string Text;
            public Bitmap BM;
            public DataTable DT;
        }

        //Main
        static void Main(string[] args)
        {
            //实例化类A对象a
            A a = new A
            {
                Text = "Hello World",
                BM = new Bitmap(100, 100),
                DT = new DataTable("table name")
            };
            //将对象二进制保存到“file.data”文件
            File.WriteAllBytes("file.dat", Serialize(a));
            //从“file.data”文件读取对象b信息
            A b = Deserialize(File.ReadAllBytes("file.dat")) as A;
            //验证一下数据是否丢失
            Console.WriteLine("Text = {0}", b.Text);
            Console.WriteLine("Bitmap Width = {0}", b.BM.Width);
            Console.WriteLine("DataTable Name = {0}", b.DT.TableName);
        }

        //C# 对象序列化
        private static byte[] Serialize(object data)
        {
            BinaryFormatter formatter = new BinaryFormatter();
            MemoryStream rems = new MemoryStream();
            formatter.Serialize(rems, data);
            return rems.GetBuffer();
        }

        //C# 对象反序列化
        private static object Deserialize(byte[] data)
        {
            BinaryFormatter formatter = new BinaryFormatter();
            MemoryStream rems = new MemoryStream(data);
            return formatter.Deserialize(rems);
        }
    }
}

不知道如何知道序列化以后占用的字节数,资源下载因为自定义格式是规定在某个位置存入对象,还需要知道存入的对象占用了多少字节,以便读取。

展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 1024 设计师: 上身试试
应支付0元
点击重新获取
扫码支付

支付成功即可阅读