using LitJson;
using System;
using System.IO;
using UnityEngine;
using UnityEngine.Networking;
using System.Collections.Generic;
using System.Collections;
public class JsonController
{
private static JsonController _Instance;
public static JsonController Instance
{
get
{
if (_Instance == null)
{
_Instance = new JsonController();
}
return _Instance;
}
}
///
/// 初始化增加对于V2V3的支持
///
public JsonController()
{
Action writeVector2 = (v, w) =>
{
w.WriteObjectStart();
w.WritePropertyName("x");
w.Write(v.x.ToString());
w.WritePropertyName("y");
w.Write(v.y.ToString());
w.WriteObjectEnd();
};
JsonMapper.RegisterExporter((v, w) =>
{
writeVector2(v, w);
});
Action writeVector3 = (v, w) =>
{
w.WriteObjectStart();
w.WritePropertyName("x");
w.Write(v.x.ToString());
w.WritePropertyName("y");
w.Write(v.y.ToString());
w.WritePropertyName("z");
w.Write(v.z.ToString());
w.WriteObjectEnd();
};
JsonMapper.RegisterExporter((v, w) =>
{
writeVector3(v, w);
});
}
public void Init() { }
///
/// /// 保存Json成文件
///
///
///
public void SaveJson(string path, object o)
{
string directoryName = Path.GetDirectoryName(path);
if (!Directory.Exists(directoryName))
{
Directory.CreateDirectory(directoryName);
}
JsonData data = JsonMapper.ToJson(o);
File.WriteAllText(path, data.ToString());
}
///
/// 从文件中读取Json
///
///
///
public JsonData ReadFromFile(string path)
{
string data = File.ReadAllText(path);
return JsonMapper.ToObject(data.ToString());
}
public IEnumerator WWWReadFromFile(string root, string[] paths, Action> ac)
{
Dictionary allDatas = new Dictionary();
for (int i = 0; i < paths.Length; i++)
{
string tablename = paths[i];
string filepath = root + tablename;
UnityWebRequest www = UnityWebRequest.Get(filepath);
yield return www.SendWebRequest();
if (www.isHttpError || www.isNetworkError)
{
Debug.LogError("UnityWebRequest加载出错");
yield break;
}
string data = www.downloadHandler.text;
JsonData tmpJsonData = JsonMapper.ToObject(data.ToString());
allDatas.Add(tablename, tmpJsonData);
}
if (ac != null)
{
ac(allDatas);
}
}
}