public static class JsonHelper
{
#region 字段
private static string json;
public static string path;
#endregion
#region 构造函数
static JsonHelper()
{
if (string.IsNullOrEmpty(path))
{
string currentDirectory = Directory.GetCurrentDirectory();
path = currentDirectory + "\\LocalData.Data";
}
if (!File.Exists(path))
{
FileStream fs = File.Create(path);
fs.Close();
}
json = LoadFromFile(path);
}
#endregion
#region 获取
public static object GetData(string propertyName)
{
return GetDate(propertyName);
}
#endregion
#region 保存
public static void SetData(string propertyName, object propertyValue)
{
SetData(ref json, propertyName, propertyValue);
SaveToFile(path);
}
#endregion
#region 移除
/// <summary>
/// 根据key值移除键值对
/// </summary>
/// <param name="propertyName">key值</param>
public static void RemovePropertyName(string propertyName)
{
Remove(ref json, propertyName);
SaveToFile(path);
}
public static void ClearData()
{
json = string.Empty;
SaveToFile(path);
}
#endregion
#region 内部方法
private static void Add(ref string json, string propertyName, object propertyValue)
{
JObject jsonObj = JObject.Parse(json);
jsonObj.Add(propertyName, JToken.FromObject(propertyValue));
json = jsonObj.ToString();
}
private static void Update(ref string json, string propertyName, object propertyValue)
{
JObject jsonObj = JObject.Parse(json);
jsonObj[propertyName] = JToken.FromObject(propertyValue);
json = jsonObj.ToString();
}
private static object GetValue(string json, string propertyName)
{
dynamic jsonObj = JsonConvert.DeserializeObject(json);
return jsonObj[propertyName];
}
private static void Remove(ref string json, string propertyName)
{
dynamic jsonObj = JsonConvert.DeserializeObject(json);
jsonObj.Remove(propertyName);
json = JsonConvert.SerializeObject(jsonObj);
}
private static void SetData(ref string json, string propertyName, object propertyValue)
{
JObject jsonObj;
if (!string.IsNullOrEmpty(json))
{
jsonObj = JObject.Parse(json);
if (jsonObj[propertyName] != null)
{
jsonObj[propertyName] = JToken.FromObject(propertyValue);
}
else
{
jsonObj.Add(propertyName, JToken.FromObject(propertyValue));
}
}
else
{
jsonObj = new JObject
{
{ propertyName, JToken.FromObject(propertyValue) }
};
}
json = jsonObj.ToString();
}
private static object GetDate(string propertyName)
{
if (!string.IsNullOrEmpty(json))
{
dynamic jsonObj = JsonConvert.DeserializeObject(json);
return jsonObj[propertyName];
}
return null;
}
private static void SaveToFile(string filePath)
{
File.WriteAllText(filePath, json);
}
private static string LoadFromFile(string filePath)
{
return File.ReadAllText(filePath);
}
#endregion
}