C#关于JSON的使用

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,
    }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值