当前位置: 首页 > article >正文

C# Bin、XML、Json的序列化和反序列化

1)序列化前的准备

声明类:


    [Serializable]
    public class BandItem
    {
        //JsonIgnore:当不想把某字段值序列化到Json时使用
        //[JsonIgnore]
        public string Name { get; set; }
        public string MusicStyle { get; set; }
        public string Masterpiece { get; set; }

        public BandItem(string name, string musicStyle, string masterpiece)
        {
            Name = name;
            MusicStyle = musicStyle;
            Masterpiece = masterpiece;
        }
    }
    

初始化集合:


 public List<BandItem> InitList()
        {
            List<BandItem> bandList = new List<BandItem>()
            {
                new BandItem("房东的猫","民谣","下一站茶山刘"),
                new BandItem("Beyond","摇滚","海阔天空")
            };

            return bandList;
        }

2)bin 文件的序列化和反序列化

写文件(序列化):


public void BinSerialize(List<BandItem> list)
        {
            Stream stream = new FileStream("test.bin", FileMode.Create);
            BinaryFormatter bf = new BinaryFormatter();
            bf.Serialize(stream, list);
            stream.Close();
        }

读文件(反序列化):


public List<BandItem> BinDeserialize(string filePath)
        {
            Stream stream = new FileStream(filePath, FileMode.Open);
            BinaryFormatter bf = new BinaryFormatter();
            List<BandItem> list = (List<BandItem>)bf.Deserialize(stream);
            stream.Close();

            return list;
        }

3)XML 的序列化和反序列化

序列化为 XML:


public string XMLSerialize(List<BandItem> list)
        {
            System.Xml.Serialization.XmlSerializer x = new System.Xml.Serialization.XmlSerializer(list.GetType());
            StringWriter sw = new StringWriter();
            x.Serialize(sw, list);
            string xml = sw.ToString();
            return xml;
        }
        

XML反序列化:


public List<BandItem> XMLDeserialize(string xml)
        {
            System.Xml.Serialization.XmlSerializer x = new System.Xml.Serialization.XmlSerializer(typeof(List<BandItem>));
            StringReader sr = new StringReader(xml);
            var list = (List<BandItem>)x.Deserialize(sr);
            return list;
        }

4)Json 的序列化和反序列化

需要一个程序包,在程序包管理控制台里输入安装命令:Install-Package Newtonsoft.Json

序列化为Json:


public string JsonSerialize(List<BandItem> list)
        {
            string json = JsonConvert.SerializeObject(list);
            return json;
        }
        

Json反序列化:


public List<BandItem> JsonDeserialize(string json)
        {
            List<BandItem> list = JsonConvert.DeserializeObject<List<BandItem>>(json);
            return list;
        }

5)序列化转换的模板

统一集合里的类型,编写成一个模板:

//对序列化和反序列化的处理
    public static class SerializeConver
    {
        //Bin文件的序列化
        public static bool BinSerializable<T>(T list,string newFilePath)
        {
            try
            {
                Stream stream = new FileStream(newFilePath, FileMode.Create);
                BinaryFormatter bf = new BinaryFormatter();
                bf.Serialize(stream, list);
                stream.Close();

                return true;
            }
            catch(Exception ex)
            {
                return false;
            }
           
        }

        //Bin文件的反序列化
        public static T BinDeserialize<T>(string sourceFilePath)
        {
            Stream stream = new FileStream(sourceFilePath, FileMode.Open);
            BinaryFormatter bf = new BinaryFormatter();
            T list = (T)bf.Deserialize(stream);
            stream.Close();
            return list;
        }

        //可扩展其他格式的序列化和反序列模板...
    }

模板的使用:


            var list = InitList();
            var isSerial = SerializeConver.BinSerializable<List<BandItem>>(list,"test.bin");
           var readList = SerializeConver.BinDeserialize<List<BandItem>>("test.bin");


http://www.kler.cn/a/154826.html

相关文章:

  • 活动|华院计算作为联盟理事单位出席进博会全球人工智能合作论坛
  • 解决背景图因为图片路径中携带括号导致图片无法显示的问题
  • maven的optional选项说明以及具体应用
  • World of Warcraft [WeakAuras]Barney Raid Kit - Collapsing Star Indicator
  • go反射深入学习
  • 基于GPU器件行为的创新分布式功能安全机制为智能驾驶保驾护航
  • 【唐山海德教育】安全员b证的考试科目
  • 学习TypeScrip4(数组类型)
  • hexo博客部署到云服务器
  • 人工智能和网络安全:坏与好
  • android交叉编译pidstat iostat mpstat
  • 【重点】【双指针】11. 盛最多水的容器
  • iRDMA流量控制总结 - 1
  • java源码-类与对象
  • 1.3 Linux文件系统
  • 04_网络编程
  • Spring之RestTemplate详解
  • 【3D程序软件】SideFX与上海道宁一直为设计师提供程序化 3D动画和视觉效果工具,旨在创造高质量的电影效果
  • mongoose学习记录
  • 吸烟(抽烟)检测和识别2:Pytorch实现吸烟(抽烟)检测和识别(含吸烟(抽烟)数据集和训练代码)
  • 算力基础设施领域国家标准发布
  • 2023.12.2 做一个后台管理网页(左侧边栏实现手风琴和隐藏/出现效果)
  • LeetCode - 965. 单值二叉树(C语言,二叉树,配图)
  • docker部署frp穿透内网
  • 面试数据库八股文十问十答第二期
  • VS安装QT VS Tools编译无法通过