Json和实体对象的转换
注意:
(1)一般情况不使用加密,若要使用加密请进行验证以免出现错误;
(2)大量数据时尽量少用Json存储数据,Json适用于轻量级数据;
(3)使用Json时需要添加依赖包,并引进命名空间;
1.安装依赖包
从包管理器添加Json依赖包,
2.引用Json的DLL文件
3.Json实用工具类
/// <summary>
/// JSON和类的序列化、反序列化
/// </summary>
public class Json
{
/// <summary>
/// 序列化
/// </summary>
public static string SerializeClass<T>(T t, EnumEncrypt encry) where T : class
{
return Encrypt(JsonConvert.SerializeObject(t), encry);
}
/// <summary>
/// 序列化
/// </summary>
public static string SerializeClass<T>(T t) where T : class
{
return Encrypt(JsonConvert.SerializeObject(t), EnumEncrypt.Default);
}
/// <summary>
/// 反序列化
/// </summary>
/// <typeparam name="T"></typeparam>
public static T DeserializeClass<T>(string info, EnumEncrypt encry) where T : class, new()
{
return JsonConvert.DeserializeObject<T>(Decrypt(info, encry)) ?? new T();
}
/// <summary>
/// 反序列化
/// </summary>
/// <typeparam name="T"></typeparam>
public static T DeserializeClass<T>(string info) where T : class, new()
{
return JsonConvert.DeserializeObject<T>(Decrypt(info, EnumEncrypt.Default));
}
/// <summary>
/// 加密
/// </summary>
/// <param name="str">要加密的字符串</param>
/// <param name="encry">编码格式</param>
/// <returns>加密后的字符串</returns>
private static string Encrypt(string str, EnumEncrypt encry)
{
try
{
byte[] bytes = null;
switch (encry)
{
case EnumEncrypt.GB2312:
bytes = Encoding.GetEncoding("GB2312").GetBytes(str);
break;
case EnumEncrypt.UTF8:
bytes = Encoding.UTF8.GetBytes(str);
break;
default:
return str;
}
var builder = new StringBuilder();
foreach (byte t in bytes)
{
builder.Append(Convert.ToString(t, 16)); //byte转化成十六进制string
}
string encrypt = builder.ToString();
return encrypt;
}
catch
{
return str;
}
}
/// <summary>
/// 解密
/// </summary>
/// <param name="str">要解密的字符串</param>
/// <param name="encry">解码格式</param>
/// <returns>解密后的字符串</returns>
private static string Decrypt(string str, EnumEncrypt encry)
{
try
{
if (encry == EnumEncrypt.Default) return str;
byte[] bytes = new byte[str.Length / 2];
int index = 0;
for (int i = 0; i < str.Length; i += 2)
{
//两个字符代表一个字节
bytes[index++] = Convert.ToByte(str.Substring(i, 2), 16);
}
string decrypt = null;
switch (encry)
{
case EnumEncrypt.GB2312:
decrypt = Encoding.Default.GetString(bytes);
break;
case EnumEncrypt.UTF8:
decrypt = Encoding.UTF8.GetString(bytes);
break;
}
return decrypt;
}
catch
{
return str;
}
}
}
/// <summary>
/// 加密编码格式
/// </summary>
public enum EnumEncrypt
{
/// <summary>
/// 不进行加密
/// </summary>
Default,
/// <summary>
/// GB2312编码
/// </summary>
GB2312,
/// <summary>
/// UTF8编码
/// </summary>
UTF8,
}