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

 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
    }

  

原文地址:https://www.cnblogs.com/51net/p/3800196.html