由于Newtonsoft只提供了序列化和反序列化,所以,基本重新写入都是全部覆盖的,所以,要进行在原数据中添加数据的话那么就必须先反序列化,拿到原有的数据,存储起来,然后再增加数据,将其序列化回去,写Json读取通用类
先拿到原有数据
List<GameObject> menuList = new List<GameObject>();
public GameObject root;
NameList NL; //存储原有的数据
// Start is called before the first frame update
void Start()
{
string path = Application.dataPath + "/StreamingAssets/Data/" + "config.json";
StreamReader sr = new StreamReader(path);
string str = sr.ReadToEnd();
sr.Close();
NL = JsonConvert.DeserializeObject<NameList>(str);
InstanceMenu(NL);
}
序列化包含原有数据的类,并且添加进去,再进行序列化
void WriteJson() {
EmployesItem EI = new EmployesItem();
EI.keshi = "脑科";
EI.zhuyuanhao = "1008";
EI.bingchuang= "100号";
EI.nianling = "18";
EI.name = "王博";
EI.xingbie = "男";
EI.miaoshu = "百日咳";
EI.zhenduan = "百日咳";
EI.shuye = "鼻饲";
Debug.Log(EI.keshi);
NL.Employes.Add(EI); //在原有数据中添加
var jsonString = JsonConvert.SerializeObject(NL); //重新序列化回去,覆盖原有的全部数据
string file = Application.dataPath + "/StreamingAssets/Data/config.json";
StreamWriter sw = new StreamWriter(file);
sw.Write(jsonString);
sw.Close();
}
快速读取,存储通用类型
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Newtonsoft.Json;
using System.IO;
/// <summary>
/// josn的通用读写操作
/// </summary>
public class JsonWR : MonoBehaviour
{
/// <summary>
/// 读取Json的操作
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="path"></param>
/// <returns></returns>
public static T Read<T>(string path) {
StreamReader sr = new StreamReader(path);
string str = sr.ReadToEnd();
sr.Close();
T t = JsonConvert.DeserializeObject<T>(str);
return t;
}
/// <summary>
/// 增加json的操作
/// </summary>
public static void Write<T>(T t,string Path) {
var jsonString = JsonConvert.SerializeObject(t); //重新序列化回去,覆盖原有的全部数据
string file = Path;
StreamWriter sw = new StreamWriter(file);
sw.Write(jsonString);
sw.Close();
}
}