7.CSharp类对象相关-序列化
7.1 知识点
申明类对象
注意:如果要使用C#自带的序列化2进制方法
申明类和结构体时需要添加[System.Serializable]特性
[System.Serializable]
public class Person
{
public int age = 1;
public string name = "韬老狮";
public int[] ints = new int[] { 1, 2, 3, 4, 5 };
public List<int> list = new List<int>() { 1, 2, 3, 4 };
public Dictionary<int, string> dic = new Dictionary<int, string>() { { 1,"123"},{ 2,"1223"},{ 3,"435345" } };
public StructTest st = new StructTest(2, "123");
public ClssTest ct = new ClssTest();
}
[System.Serializable]
public struct StructTest
{
public int i;
public string s;
public StructTest(int i, string s)
{
this.i = i;
this.s = s;
}
}
[System.Serializable]
public class ClssTest
{
public int i = 1;
}
将对象进行2进制序列化
新知识点:
- 内存流对象 主要用于得到字节数组,可用于网络传输
- 类名:MemoryStream
- 命名空间:System.IO
- 主要方法:得到字节数组方法 GetBuffer
- 2进制格式化对象
- 类名:BinaryFormatter
- 命名空间:System.Runtime.Serialization.Formatters.Binary
- 主要方法:序列化方法 Serialize
声明Person对象
Person person = new Person();
方法一:使用内存流得到2进制字节数组
using (MemoryStream memoryStream = new MemoryStream())
{
// 创建2进制格式化对象
BinaryFormatter binaryFormatter = new BinaryFormatter();
// 序列化对象,生成2进制字节数组,写入到内存流当中
binaryFormatter.Serialize(memoryStream, person);
// 得到内存流的2进制字节数组
byte[] bytes = memoryStream.GetBuffer();
// 存储字节
File.WriteAllBytes(Application.dataPath + "/Lesson07_CSharp类对象相关_序列化1.linwentao", bytes);
// 关闭内存流
memoryStream.Close();
}
方法二:使用文件流进行存储
主要用于存储到文件中
using (FileStream fileStream = new FileStream(Application.dataPath + "/Lesson07_CSharp类对象相关_序列化2.linwentao", FileMode.OpenOrCreate, FileAccess.Write))
{
// 创建2进制格式化对象
BinaryFormatter binaryFormatter = new BinaryFormatter();
// 序列化对象,生成2进制字节数组,写入到文件流当中
binaryFormatter.Serialize(fileStream, person);
// 刷新存储
fileStream.Flush();
// 关闭文件流
fileStream.Close();
}
总结
C#提供的类对象2进制序列化主要类是 BinaryFormatter,通过其中的序列化方法即可进行序列化生成字节数组
7.2 知识点代码
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
using UnityEngine;
public class Lesson07_CSharp类对象相关_序列化 : MonoBehaviour
{
void Start()
{
#region 知识点一 序列化类对象第一步—申明类对象
//注意:如果要使用C#自带的序列化2进制方法
//申明类和结构体时需要添加[System.Serializable]特性
#endregion
#region 知识点二 序列化类对象第二步—将对象进行2进制序列化
//声明Person对象
Person person = new Person();
//方法一:使用内存流得到2进制字节数组
//主要用于得到字节数组 可以用于网络传输
//新知识点
//1.内存流对象
//类名:MemoryStream
//命名空间:System.IO
//2.2进制格式化对象
//类名:BinaryFormatter
//命名空间:System.Runtime.Serialization.Formatters.Binary
//主要方法:序列化方法 Serialize
using (MemoryStream memoryStream = new MemoryStream())
{
//2进制格式化程序
//创建2进制格式化对象
BinaryFormatter binaryFormatter = new BinaryFormatter();
//序列化对象 生成2进制字节数组 写入到内存流当中
//用2进制格式化对象的序列化方法 传入Person对象 写入到内存流对象中
binaryFormatter.Serialize(memoryStream, person);
//得到内存流对的2进制字节数组
byte[] bytes = memoryStream.GetBuffer();
//存储字节
File.WriteAllBytes(Application.dataPath + "/Lesson07_CSharp类对象相关_序列化1.linwentao", bytes);
//关闭内存流
memoryStream.Close();
}
//方法二:使用文件流进行存储
//主要用于存储到文件中
using (FileStream fileStream = new FileStream(Application.dataPath + "/Lesson07_CSharp类对象相关_序列化2.linwentao", FileMode.OpenOrCreate, FileAccess.Write))
{
//2进制格式化程序
//创建2进制格式化对象
BinaryFormatter binaryFormatter = new BinaryFormatter();
//序列化对象 生成2进制字节数组 写入到内存流当中
//用2进制格式化对象的序列化方法 传入Person对象 写入到文件流对象中
binaryFormatter.Serialize(fileStream, person);
//刷新存储
fileStream.Flush();
//关闭内存流
fileStream.Close();
}
#endregion
#region 总结
//C#提供的类对象2进制序列化主要类是 BinaryFormatter
//通过其中的序列化方法即可进行序列化生成字节数组
#endregion
}
}
#region 知识点一 序列化类对象第一步—申明类对象
[System.Serializable]
public class Person
{
public int age = 1;
public string name = "韬老狮";
public int[] ints = new int[] { 1, 2, 3, 4, 5 };
public List<int> list = new List<int>() { 1, 2, 3, 4 };
public Dictionary<int, string> dic = new Dictionary<int, string>() { { 1,"123"},{ 2,"1223"},{ 3,"435345" } };
public StructTest st = new StructTest(2, "123");
public ClssTest ct = new ClssTest();
}
[System.Serializable]
public struct StructTest
{
public int i;
public string s;
public StructTest(int i, string s)
{
this.i = i;
this.s = s;
}
}
[System.Serializable]
public class ClssTest
{
public int i = 1;
}
#endregion
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com