序列化是指将对象转换成字节流,从而存储对象或将对象传输到内存、数据库或文件的过程。主要用途是保存对象的状态,以便能够在需要时重新创建对象。 反向过程称为“反序列化”。
Json序列化
使用JsonSerializerOptions对象
将sonSerializerOptions命名空间中的特性应用于类或属性
实现自定义转换器
todo:demo(啥时候用到了或者有心情了再补充吧)
二进制和XML序列化
二进制序列化使用二进制编码来生成精简的序列化以供使用,如基于存储或套接字的网络流。 在二进制序列化中,所有成员(包括只读成员)都会被序列化,且性能也会有所提升。
XML 序列化将对象的公共字段和属性或方法的参数和返回值序列化成 XML 流。
如果可序列化的类型中的一个字段包含指针、句柄或特定环境专用的一些数据结构,且不能在其他环境中有意义地重构,可以不对该字段进行序列化,通过对字段应用标记NonSerializedAttribute特性实现。
如果已序列化的类引用了被标记 SerializableAttribute 的其他类的对象,那么这些对象也会被序列化。
二进制和XML序列化的两种方法:基本和自定义
基本序列化唯一的要求就是为类应用 SerializableAttribute(MSDN说的,但不加也可以正常序列化,不会异常),较为简单,无法提供太多的进程控制
/// <summary>
/// 将ListView的变动存入配置文件
/// </summary>
public void SaveSetUp()
{
XmlSerializer xmlSerializer = new XmlSerializer(typeof(ObservableCollection<ListViewSignal>));
var path = Environment.CurrentDirectory+"\\SignalListSetup.xml";
var stream = new FileStream(path, FileMode.Create, FileAccess.Write);
xmlSerializer.Serialize(stream, listViewSignalList);
stream.Close();
}
/// <summary>
/// 加载配置文件
/// </summary>
public void LoadSetUp()
{
var path = Environment.CurrentDirectory + "\\SignalListSetup.xml";
if (File.Exists(path))
{
XmlSerializer xmlSerializer = new XmlSerializer(typeof(ObservableCollection<ListViewSignal>));
var reader = new StreamReader(path);
ListViewSignalCollection = xmlSerializer.Deserialize(reader) as ObservableCollection<ListViewSignal>;
reader.Close();
}
}
自定义序列化中,可以精确指定要序列化的对象以及具体执行方式。 类要被标记为 SerializableAttribute ,并实现 ISerializable接口。 如果还希望按自定义方式反序列化对象,需要用自定义构造函数。
todo:demo