因为前一段时间在客户现场经常需要连接客户Mes,Mes系统使用的数据格式又跟Json很像,后面想到做个Json格式储存文件的测试,于是就写了这个常用的工具类。
废话少说,上代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Windows.Forms;
using System.ServiceModel;
using System.ServiceModel.Web;
using Newtonsoft.Json;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;
namespace ST8PTConvertTool
{
public class JsonUtility
{
private static string jsonFolerPath = Environment.CurrentDirectory + "\\Set\\JsonData"; //储存参数设置文件
private static string jsonFolerPathBackUp = jsonFolerPath + "\\JsonData_BK"; //储存参数设置文件
public enum JsonFileName
{
Parameter,//程序所有设置参数JSON文件名称
}
/// <summary>
/// 序列化Json
/// </summary>
/// <typeparam name="T">class</typeparam>
/// <param name="t"></param>
/// <returns></returns>
public static string JsonSerialize<T>(T t) where T : class
{
string serializeStr = JsonConvert.SerializeObject(t);
return serializeStr;
}//序列化
/// <summary>
/// 反序列化Json
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="serializeStr">class</param>
/// <returns></returns>
public static T JsonDeserialize<T>(string serializeStr) where T : class
{
T objData = default(T);
try
{
if (serializeStr.Trim().Length != 0)
{
using (MemoryStream memoryStream = new MemoryStream(Encoding.Unicode.GetBytes(serializeStr)))
{
DataContractJsonSerializer deseralizer = new DataContractJsonSerializer(typeof(T));
objData = (T)deseralizer.ReadObject(memoryStream);
return objData;
}
}
}
catch (Exception ex)
{
}
return objData;
} //反序列化
/// <summary>
/// 写入Json文件
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="t"></param>
/// <param name="fileName"></param>
/// <returns></returns>
public static bool WriteJsonFile<T>(T t, string fileName) where T : class
{
bool writeResult = false;
string writeValue = string.Empty;
try
{
if (!File.Exists(jsonFolerPath))
{
Directory.CreateDirectory(jsonFolerPath);
}//创建JSON文件夹
if (!File.Exists(jsonFolerPathBackUp))
{
Directory.CreateDirectory(jsonFolerPathBackUp);
} //创建JSON备份文件夹
bool isFileExisted = File.Exists(jsonFolerPath + "\\" + fileName + ".JSON");
if (isFileExisted)
{
string backupDateTime = DateTime.Now.ToString("yyyy-MM-dd HHmmss");
File.Move(jsonFolerPath + "\\" + fileName + ".JSON", jsonFolerPathBackUp + "\\" + fileName + "_" + backupDateTime + ".JSON");
}//判断文件已经存在就移动到备份文件夹
using (StreamWriter sw = File.CreateText(jsonFolerPath + "\\" + fileName + ".JSON"))
{
writeValue = JsonSerialize(t);
sw.Write(writeValue);
} //创建新的文件夹并写入参数数据
writeResult = true;
}
catch (Exception ex)
{
writeResult = false;
MessageBox.Show("读取Json配置档出错!\r\n错误代码:" + ex.ToString(), "信息提示");
}
return writeResult;
} //写入Json文件
/// <summary>
/// 读取Json文件并反序列化
/// </summary>
/// <typeparam name="T">泛型</typeparam>
/// <param name="fileName">文件名</param>
/// <returns></returns>
public static T ReadJsonFile<T>(string fileName) where T : class
{
string getData = string.Empty;
T data = default(T);
string filePath = jsonFolerPath + "\\" + fileName + ".JSON";
if (!File.Exists(filePath))
{
return data;
}
else
{
using (StreamReader sr = new StreamReader(filePath))
{
getData = sr.ReadToEnd();
data = JsonDeserialize<T>(getData);
}
}
return data;
}//读取Json文件并反序列化
}
}
可能需要引用几个DLL,Newtonsoft.Json、System.Runtime.Serialization、System.ServiceModel、System.ServiceModel.Web、
使用示例:
存储的文件位置与内容效果: