最近项目中需要借助txt保存一些文件的数据,于是学习了使用json
总的来说非常方便,易于理解
需求与分析
需要能够将生成的文件在本地保存一年(自创建时起),期间可以随时提取并使用
要有两种搜索途径,一种是通过输入完整的id码(由创建时的时间和随机数组成),另一种是通过查看某一天的全部文件自行筛选
由于读取txt文档比逐个读取文件并判断文件名更有效率,考虑创建文件时根据日期来存入对应的文件夹(File - 年 - 月 - 日),并将创建日期、地址数据封装成一个FileData类存入当天的Json文件FileDataDaily类,这样可以先把搜索范围精确到某一天,再进行剩下的筛选
再将该FileDataDaily文件的创建日期和地址封装成一个FDDInfo类,根据日期查询到该FDDInfo文件的地址,来读取该FileDataDaily文件,获取当天的所有文件的FileData
也可以更细分为每个月、每年的FileInfo文件,这里因为只保存1年,并没有分的太细
代码摘录和笔记
Json和txt文件
Json部分可以使用unity自带的JsonUtility,也可以使用Newtonsoft.Json
使用Json将类的实例的数据存入txt文件 = 将该实例序列化后写入txt文件
使用Json从txt读取类的实例的数据 = 读取txt文件后反序列化生成该实例
可序列化的属性可以在类的开头使用[Serializable]
来声明
// 每个文件的信息
[System.Serializable]
public class FileData
{
public string id;
public string path;
}
// 每日生成的所有文件的链表
[System.Serializable]
public class FileDataDaily
{
public List<FileData> FileDataList;
}
// 每日生成的FileDataDaily文件的信息
[System.Serializable]
public class FDDInfo
{
// json文件生成的年月日
public int year;
public int month;
public int day;
// json文件存储的地址
public string path;
}
// 每年生成的FileDataDaily文件的链表
[System.Serializable]
public class FDDInfoList
{
public List<FDDInfo> infoList;
}
类之间的关系如下:
其中FDDInfoList和FileDataDaily会作为文件保存,内容分别为FDDInfo和FileDataList序列化的链表
工具脚本
工具脚本要有读取、写入txt的功能,而能正确读取和写入txt,需要可以进行正确的序列化和反序列化
序列化与反序列化
public string ToJson(object o)
{
if