动态加载Newtonsoft.Json

从运行库中动态加载Newtonsoft.Json,使用Json序列化和反序列化。加载库时可以使用AppDomain.CurrentDomain.Load()。

    public static class JsonConvert
    {
        const string assemblyName = "Newtonsoft.Json";
        const string className = "JsonConvert";
        const string sMth_Name = "SerializeObject";
        const string dMth_Name = "DeserializeObject";
        static Act CurrAct;
        public static string SerializeObject(object value)
        {
            Init();
            object r = CurrAct.SerializeObject(value);
            return r == null ? null : r.ToString();
        }
        public static T DeserializeObject<T>(string value)
        {
            Init();
            object r = CurrAct.DeserializeObject(value, typeof(T));
            if (r == null) return default(T);
            return (T)r;
        }
        private static void Init()
        {
            if (CurrAct != null) return;
            // 加载 Newtonsoft.Json
            AppDomain.CurrentDomain.Load(assemblyName);
            Assembly JsonAssembly = AppDomain.CurrentDomain.GetAssemblies().Where(o => o.GetName().Name == assemblyName).FirstOrDefault();
            if (JsonAssembly == null)
            {
                throw new Exception(string.Format("未能加载到程序集 {0}.dll", assemblyName));
                return;
            }
            Type cvtClass = JsonAssembly.GetType(assemblyName + "." + className);
            var m_s = cvtClass.GetMethod(sMth_Name, new Type[] { typeof(object) });
            var m_d = cvtClass.GetMethod(dMth_Name, new Type[] { typeof(string), typeof(Type) });
            CurrAct = new Act(m_s, m_d);
        }

        class Act
        {
            public delegate object DeserializeObjectHandler(string value, Type type);
            public delegate string SerializeObjectHandler(object value);

            private DeserializeObjectHandler Dlg_DeserializeObject;
            private SerializeObjectHandler Dlg_SerializeObject;
            public Act(MethodInfo mtd_serializeobject, MethodInfo mtd_deserializeobject)
            {

                Dlg_DeserializeObject = (DeserializeObjectHandler)Delegate.CreateDelegate(typeof(DeserializeObjectHandler), mtd_deserializeobject);
                Dlg_SerializeObject = (SerializeObjectHandler)Delegate.CreateDelegate(typeof(SerializeObjectHandler), mtd_serializeobject);
            }
            public DeserializeObjectHandler DeserializeObject
            {
                get
                {
                    return Dlg_DeserializeObject;
                }
            }

            public SerializeObjectHandler SerializeObject
            {
                get
                {
                    return Dlg_SerializeObject;
                }
            }
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值