自己写的读写Json文件的JsonHelper
using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System.IO; namespace Phoenix.Spider.Helpers { public class JsonHelper { private string _fileFullName; public JsonHelper(string fileFullName) { _fileFullName = fileFullName; } /// <summary> /// 加载整个文件并反序列化为一个对象 /// </summary> /// <typeparam name="T"></typeparam> /// <returns></returns> public T Get<T>() { if (!File.Exists(_fileFullName)) { return default(T); } string jsonStr; jsonStr = File.ReadAllText(_fileFullName); var result = JsonConvert.DeserializeObject<T>(jsonStr); return result; } /// <summary> /// 从Json文件中读取对象 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="keyLink">对象的键名链,例如 Order.User</param> /// <returns>类型为T的对象</returns> public T Get<T>(string keyLink) { if (!File.Exists(_fileFullName)) { return default(T); } using (StreamReader streamReader = new StreamReader(_fileFullName)) { string jsonStr = streamReader.ReadToEnd(); dynamic obj = JsonConvert.DeserializeObject(jsonStr); if (obj == null) { obj = (JObject)JToken.FromObject(new object()); } var keys = keyLink.Split('.'); dynamic currentObject = obj; foreach (var key in keys) { currentObject = currentObject[key]; if (currentObject == null) { return default(T); } } var result = Newtonsoft.Json.JsonConvert.DeserializeObject<T>(currentObject.ToString()); return result; } } /// <summary> /// 设置对象值 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="keyLink">对象的键名链,例如 Order.User,当其上级不存在时将创建</param> /// <param name="value"></param> public void Set<T>(string keyLink, T value) { dynamic obj; if (!File.Exists(_fileFullName)) { obj = (JObject)JToken.FromObject(new object()); } else { string jsonStr; jsonStr = File.ReadAllText(_fileFullName); obj = JsonConvert.DeserializeObject(jsonStr); if (obj==null) { obj = (JObject)JToken.FromObject(new object()); } } var keys = keyLink.Split('.'); dynamic currentObject = obj; for (int i = 0; i < keys.Length; i++) { var oldObject = currentObject; currentObject = currentObject[keys[i]]; var isValueType = value.GetType().IsValueType; if (i == keys.Length - 1) { if (isValueType || value is string) { oldObject[keys[i]] = new JValue(value); } else { oldObject[keys[i]] =JToken.FromObject(value); } } else { //如果不存在,新建 if (currentObject == null) { JObject o = (JObject)JToken.FromObject(new object()); oldObject[keys[i]] = o; currentObject = oldObject[keys[i]]; continue; } } } Save<dynamic>(obj); } /// <summary> /// 保存Json文件 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="obj"></param> public void Save<T>(T obj) { string str = JsonConvert.SerializeObject(obj, Formatting.Indented); File.WriteAllText(_fileFullName, str); } } }
使用方法:
var jHelper = new JsonHelper(path2); var obj = jHelper.Get<AAAA>("OracleConn.Others.OOO"); jHelper.Set<AAAA>("OracleConn.Others.OOO", new AAAA { Key = "天", Value = "地" }); jHelper.Set<AAAA>("tttt.mmmm.bbbb", new AAAA { Key = "1", Value = "地" }); jHelper.Set<string>("aaaaaa", "13555"); var aaaaa = jHelper.Get<string>("aaaaaa"); var bbbbb = jHelper.Get<AAAA>("tttt.mmmm.bbbb");
浙公网安备 33010602011771号