前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C# 对JS编码/解码进行转换

C# 对JS编码/解码进行转换

作者头像
跟着阿笨一起玩NET
发布2018-09-19 11:33:32
4.9K0
发布2018-09-19 11:33:32
举报
代码语言:javascript
复制
 public static class Extension
    {
        #region [编码/解码统一转换]
        /// <summary>
        /// 
        /// </summary>
        /// <param name="str"></param>
        /// <param name="isEscape">True为Encode;False为Decode</param>
        /// <returns></returns>
        public static string JSCodingString(this string str, bool isEscape = false)
        {
            if (isEscape)
                return Microsoft.JScript.GlobalObject.escape(str);
            else
                return Microsoft.JScript.GlobalObject.unescape(str);
        }

        /// <summary>
        /// js编码解码
        /// </summary>
        /// <param name="lsto"></param>
        /// <param name="isEscape"></param>
        public static void JSCodingEntityList<T>(this List<T> lsto, bool isEscape = false)
        {
            foreach (object o in lsto)
            {
                JSCodingEntity(o, isEscape);
            }
        }

        /// <summary>
        /// js编码解码
        /// </summary>
        /// <param name="o"></param>
        /// <param name="isEscape"></param>
        public static void JSCodingEntity<T>(this T o, bool isEscape = false)
        {
            object objValue;
            System.Reflection.PropertyInfo[] propertys = o.GetType().GetProperties();
            foreach (System.Reflection.PropertyInfo p in propertys)
            {
                if (p.PropertyType == typeof(System.String))
                {
                    objValue = p.GetValue(o, null);
                    if (objValue != null)
                    {
                        if (objValue.GetType() == typeof(System.String))
                        {
                            if (isEscape)
                                p.SetValue(o, Microsoft.JScript.GlobalObject.escape(objValue.ToString()), null);
                            else
                                p.SetValue(o, Microsoft.JScript.GlobalObject.unescape(objValue.ToString()), null);
                        }
                    }
                }
            }
        }

        /// <summary>
        /// js编码解码
        /// </summary>
        /// <param name="o"></param>
        /// <param name="isEscape"></param>
        public static void JSCodingTable(this DataSet o, bool isEscape = false)
        {
            foreach (DataTable t in o.Tables)
            {
                JSCodingEntity(t, isEscape);
            }
        }

        /// <summary>
        /// js编码解码
        /// </summary>
        /// <param name="o"></param>
        /// <param name="isEscape"></param>
        public static void JSCodingTable(this DataTable o, bool isEscape = false)
        {
            for (int j = 0; j < o.Columns.Count; j++)
            {
                if (o.Columns[j].DataType == typeof(System.String))
                {
                    for (int i = 0; i < o.Rows.Count; i++)
                    {
                        if (isEscape)
                            o.Rows[i][j] = Microsoft.JScript.GlobalObject.escape(o.Rows[i][j].ToString());
                        else
                            o.Rows[i][j] = Microsoft.JScript.GlobalObject.unescape(o.Rows[i][j].ToString());
                    }
                }
            }
        } 
        #endregion

        #region [重构:将原有编码/解码采用独立的函数方式。]
        public static string ToJSEncodeString(this string str)
        {
            return Microsoft.JScript.GlobalObject.escape(str);
        }

        public static string ToJSDecodeString(this string str)
        {
            return Microsoft.JScript.GlobalObject.unescape(str);
        }

        public static void ToJSEncodeEntityList<T>(this List<T> lsto)
        {
            foreach (object o in lsto)
            {
                ToJSEncodeEntity(o);
            }
        }

        public static void ToJSDecodeEntityList<T>(this List<T> lsto)
        {
            foreach (object o in lsto)
            {
                ToJSDecodeEntity(o);
            }
        }

        public static void ToJSEncodeEntity<T>(this T o)
        {
            object objValue;
            System.Reflection.PropertyInfo[] propertys = o.GetType().GetProperties();
            foreach (System.Reflection.PropertyInfo p in propertys)
            {
                if (p.PropertyType == typeof(System.String))
                {
                    objValue = p.GetValue(o, null);
                    if (objValue != null)
                    {
                        if (objValue.GetType() == typeof(System.String))
                        {
                            p.SetValue(o, Microsoft.JScript.GlobalObject.escape(objValue.ToString()), null);
                        }
                    }
                }
            }
        }

        public static void ToJSDecodeEntity<T>(this T o)
        {
            object objValue;
            System.Reflection.PropertyInfo[] propertys = o.GetType().GetProperties();
            foreach (System.Reflection.PropertyInfo p in propertys)
            {
                if (p.PropertyType == typeof(System.String))
                {
                    objValue = p.GetValue(o, null);
                    if (objValue != null)
                    {
                        if (objValue.GetType() == typeof(System.String))
                        {
                            p.SetValue(o, Microsoft.JScript.GlobalObject.unescape(objValue.ToString()), null);
                        }
                    }
                }
            }
        }

        public static void ToJSEncodeTable(this DataSet o)
        {
            foreach (DataTable t in o.Tables)
            {
                ToJSEncodeTable(t);
            }
        }

        public static void ToJSDecodeTable(this DataSet o)
        {
            foreach (DataTable t in o.Tables)
            {
                ToJSDecodeTable(t);
            }
        }

        public static void ToJSEncodeTable(this DataTable o)
        {
            for (int j = 0; j < o.Columns.Count; j++)
            {
                if (o.Columns[j].DataType == typeof(System.String))
                {
                    for (int i = 0; i < o.Rows.Count; i++)
                    {
                        o.Rows[i][j] = Microsoft.JScript.GlobalObject.escape(o.Rows[i][j].ToString());
                    }
                }
            }
        }

        public static void ToJSDecodeTable(this DataTable o)
        {
            for (int j = 0; j < o.Columns.Count; j++)
            {
                if (o.Columns[j].DataType == typeof(System.String))
                {
                    for (int i = 0; i < o.Rows.Count; i++)
                    {
                        o.Rows[i][j] = Microsoft.JScript.GlobalObject.unescape(o.Rows[i][j].ToString());
                    }
                }
            }
        }

        #endregion
    }
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2014-06-20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档