C#中Json的使用

时间:2025-04-17 12:05:46
///创建并保存Json文件
    public void SaveToJson<T>(T t, string AssetPath)
    {
        //讲对象转化为Json字符串
        string JsonData = JsonMapper.ToJson(t);
        string filePath = Application.dataPath + AssetPath;

        if (!File.Exists(filePath))
        {
            FileStream f = File.Create(filePath);
            f.Close();
        }
        //打开文件流,create模式表示如果不存在则创建,如果存在则覆盖
        FileStream fs = File.Open(filePath, FileMode.Create);
        //创建StreamWriter
        StreamWriter sw = new StreamWriter(fs, Encoding.UTF8);
        //写入Json字符
        sw.Write(JsonData);
        //清空缓冲区,确保写入
        sw.Flush();
        //关闭StreamWriter
        sw.Close();
        //关闭文件流
        sw.Close();
    }
/// <summary>
    /// 读取Json文件封装方法
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="AssetPath"></param>
    /// <returns></returns>

    public T LoadFromJsonFile<T>(string AssetPath)
    {
        try
        {
            //要解析的Json文件路径
            string filePath = Application.dataPath + AssetPath;

            //解析路径中的Json
            T t = JsonMapper.ToObject<T>(File.ReadAllText(filePath));

            if (t == null)
            {
                Debug.Log("读取Json文件为空");
            }
            return t;
        }
        catch (Exception e)
        {
            Debug.Log(e);
            return default(T);
        }
    }

先上两个封装好了的方法:第一个是创建Json文件方法;第二个是读取Json文件方法。直接就可以使用,在其他类直接调用方法即可。
下面上使用的具体实例:先上创建Json文件的操作。首先可以根据自己的具体需求来创建保存数据的类。`

public class PrefabsName
{
    public string name;
    public int Num;
    public double GoldNum;
}

而且我们配置Json文件的时候不可能只配置一组数据,那样用Json就得不偿失了。那么我们还可以在创建一个类来保存每一组数据`

public class PrefabsNames
{
    public PrefabsName[] Json;
}

然后再根据需求在你感觉合适的地方把你的每组数据按照这个格式写进去

PrefabsName p1 = new PrefabsName() { name = "ZuanShi1", Num = 50, GoldNum = 2.49 };
        PrefabsName p2 = new PrefabsName() { name = "ZuanShi2", Num = 100, GoldNum = 4.9 };
        PrefabsName p3 = new PrefabsName() { name = "ZuanShi3", Num = 250, GoldNum = 9.9 };
        PrefabsName p4 = new PrefabsName() { name = "ZuanShi4", Num = 1000, GoldNum = 34.9 };
        PrefabsName p5 = new PrefabsName() { name = "Start1", Num = 500, GoldNum = 2.49 };
        PrefabsName p6 = new PrefabsName() { name = "Start2", Num = 1000, GoldNum = 4.9 };
        PrefabsName p7 = new PrefabsName() { name = "Start3", Num = 2500, GoldNum = 9.9 };
        PrefabsName p8 = new PrefabsName() { name = "Start4", Num = 5000, GoldNum = 34.9 };

        PrefabsNames pre = new PrefabsNames();
        pre.Json = new PrefabsName[] { p1, p2, p3, p4, p5, p6, p7, p8 };
        SaveWithJson.Instance.SaveToJson(pre, "/Jsons/");

最后调用的就是上面封装好的方法,第二个参数是要保存的路径。
下面是读取Json的使用方法:

pp = SaveWithJson.Instance.LoadFromJsonFile<PrefabsNames>("/Jsons/");
        for (int i = 0; i < pp.Json.Length; i++)
        {
            PrefabsName Pr = pp.Json[i];
            CreatPrefabs(Pr.name, Pr.Num, Pr.GoldNum);
        }

直接调用解析的方法,参数传Json文件的位置。因为之前已经定义了一个数组来保存每一组数据,那么我们继续用这个数组接收解析的所有数据,然后便利即可。

简单粗暴的方法!