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

简介: public static class Extension { #region [编码/解码统一转换] /// /// /// /// /// True为Encode;...
 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
    }

  

目录
相关文章
|
1月前
|
存储 C#
C#使用哈夫曼编码实现压缩与解压
C#使用哈夫曼编码实现压缩与解压
29 0
|
3月前
|
开发者 C# Android开发
Xamarin 与 .NET:解锁现代化移动应用开发的超级武器——深入探讨C#与.NET框架如何赋能跨平台应用,实现高效编码与卓越性能
【8月更文挑战第31天】Xamarin 与 .NET 的结合为开发者提供了强大的平台,用于构建现代化移动应用。通过 C# 和 .NET 框架,Xamarin 可以实现一次编写、多平台运行,覆盖 iOS、Android 和 Windows。这种方式不仅节省了开发时间和成本,还保证了应用的一致性和高质量。Xamarin 是一个开源框架,专为跨平台移动应用开发设计,允许使用 C# 语言和 .NET 核心库构建原生应用,并访问各平台特定功能。微软维护的 Xamarin 是 Visual Studio 生态系统的一部分,极大地提高了开发效率。
85 0
|
3月前
|
JavaScript 前端开发
JS - 如何上传 Base64 编码的图片
本文展示了如何将Base64编码的图片在前端转换为Blob对象,并使用`FormData`上传到服务器端的方法。
194 0
|
4月前
|
JavaScript 前端开发 网络架构
JavaScript编码之路【对象的增强、ES6新特性之函数的默认值设置 、rest参数 (剩余参数)、拓展运算符、对象与数组的解构赋值】
JavaScript编码之路【对象的增强、ES6新特性之函数的默认值设置 、rest参数 (剩余参数)、拓展运算符、对象与数组的解构赋值】
57 1
|
4月前
|
存储 JavaScript 前端开发
JavaScript编码之路【ES6新特性之 Symbol 、Set 、Map、迭代器、生成器】(二)
JavaScript编码之路【ES6新特性之 Symbol 、Set 、Map、迭代器、生成器】(二)
54 1
|
4月前
|
JavaScript 前端开发 索引
JavaScript编码之路 【JavaScript之操作数组、字符串方法汇总】(三)
JavaScript编码之路 【JavaScript之操作数组、字符串方法汇总】(三)
44 1
|
4月前
|
存储 JavaScript 前端开发
JavaScript编码之路【ES6新特性之 Symbol 、Set 、Map、迭代器、生成器】(一)
JavaScript编码之路【ES6新特性之 Symbol 、Set 、Map、迭代器、生成器】(一)
40 0
|
4月前
|
JavaScript 前端开发
JavaScript编码之路【ES6新特性之Class类】(二)
JavaScript编码之路【ES6新特性之Class类】(二)
26 0
|
4月前
|
JavaScript 前端开发
JavaScript编码之路【ES6新特性之Class类】(一)
JavaScript编码之路【ES6新特性之Class类】(一)
35 0
|
4月前
|
JavaScript 前端开发 API
JavaScript编码之路【ES6新特性之模块化】
JavaScript编码之路【ES6新特性之模块化】
48 0