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

|---------------|
| 1)序列化前的准备 |

声明类:

c 复制代码
    [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;
        }
    }
    

初始化集合:

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

            return bandList;
        }

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

写文件(序列化):

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

读文件(反序列化):

c 复制代码
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:

c 复制代码
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反序列化:

c 复制代码
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:

c 复制代码
public string JsonSerialize(List<BandItem> list)
        {
            string json = JsonConvert.SerializeObject(list);
            return json;
        }
        

Json反序列化:

c 复制代码
public List<BandItem> JsonDeserialize(string json)
        {
            List<BandItem> list = JsonConvert.DeserializeObject<List<BandItem>>(json);
            return list;
        }

|----------------|
| 5)序列化转换的模板 |

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

c 复制代码
//对序列化和反序列化的处理
    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;
        }

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

模板的使用:

c 复制代码
            var list = InitList();
            var isSerial = SerializeConver.BinSerializable<List<BandItem>>(list,"test.bin");
           var readList = SerializeConver.BinDeserialize<List<BandItem>>("test.bin");
相关推荐
波力海苔夹心脆6751 天前
C# WPF 资源字典详解:ResourceDictionary、MergedDictionaries 与自定义控件案例
开发语言·c#·wpf·入门教程·resource·资源字典
AI导出鸭PC端1 天前
Perplexity批量导出没有PDF模式?AI导出鸭插件补上最后一块拼图
人工智能·pdf·c#·ai导出鸭
Risehuxyc1 天前
C# 选用更流行的语言版本
c#
淡海水2 天前
09-04-内存-Unity原生对象生命周期
unity·c#·游戏引擎·gc
吴可可1232 天前
富怡CAD二次开发指南
c#
1-1=02 天前
C# IO和序列化
c#·.net·.netcore
Hello_Pyhx2 天前
NWinfo 导出 Windows 硬件信息:从 JSON 报告到缺项排查
windows·json
寂寞的船2 天前
【Unity Bug挑战】第10期 SerializeReference 内存泄漏之谜
unity·c#·游戏引擎·bug
CSharp精选营2 天前
从控制台到「会动手」的 AI:用 Semantic Kernel 搭应用(小白教程)
c#·.net·ai agent·semantickernel·functioncalling
程序员大阳3 天前
副队长JavaScript教程(66)-本地存储实战:待办事项网页的开发
javascript·json·实战·待办事项·本地存储·案例