asp mvc 导出txt 文件泛型方法

 asp mvc 导出txt 文件泛型方法分享:

 

  

public static void ExportFile<T>(T obj)
        {

            StringBuilder str = new StringBuilder();

            //列出obj 对象中的所有属性
            System.Reflection.PropertyInfo[] properties = obj.GetType().GetProperties();

            if (properties != null && properties.Length > 0)
            {
                // 局部变量 用来判断循环次数,输出换行和逗号
                int j = 0;

                foreach (var item in properties)
                {
                    // 获取属性值
                    object objvalue = item.GetValue(obj, null);
                    //是否是泛型类型
                    if (item.PropertyType.IsGenericType)
                    {

                        Type objType = objvalue.GetType();
                        // 获取泛型集合总数
                        int count = Convert.ToInt32(objType.GetProperty("Count").GetValue(objvalue, null));
                        // 遍历集合
                        for (int i = 0; i < count; i++)
                        {

                            object listitem = objType.GetProperty("Item").GetValue(objvalue, new object[] { i });

                            System.Reflection.PropertyInfo[] myPros = listitem.GetType().GetProperties();
                            // 局部变量 用来判断循环次数,输出换行和逗号
                            int k = 0;
                            // 遍历集合中的属性
                            foreach (var m in myPros)
                            {
                                 // 属性名
                                //str.Append(m.Name);
                                //str.Append(",");
                                //str.Append("\t");
                                if (m.GetValue(listitem, null) != null)
                                {
                                    // 属性值
                                    str.Append(m.GetValue(listitem, null));
                                }
                                else
                                {
                                    str.Append("空值");
                                }
                                // 换行
                                if ((k+1) % 2 == 0)
                                {
                                    str.Append("\n");
                                }
                                // 输出 逗号
                                else if (k % 2 == 0)
                                {
                                    str.Append(",");
                                }
                                k++;
                            }
                            }
                    }

                     // 非泛型类型
                    else
                    {
                        // 属性名
                        //str.Append(item.Name);
                        //str.Append(",");
                        //str.Append("\t");

                        //判断属性值
                        if (item.GetValue(obj, null) != null)
                        {
                            // 属性值
                            str.Append(item.GetValue(obj, null));
                        }
                        else
                        {
                            str.Append("空值");
                        }
                        // 换行
                        if ((j+1) % 2 == 0)
                        {
                            str.Append("\n");
                        }
                        // 输出逗号
                        else if (j % 2 == 0)
                        {
                            str.Append(",");
                        }
                        j++;
                    }
                }
            }

            HttpContext.Current.Response.Clear();
            // 启用缓存
            HttpContext.Current.Response.Buffer = true;
            //中文编码
            HttpContext.Current.Response.Charset = "GB2312";   //  或者 "utf-8"
            // 设置编码方式
            HttpContext.Current.Response.ContentEncoding = Encoding.UTF8;

            //文件名称
            string filename = DateTime.Now.ToString("yyyyMMddHHmmssffff") + ".txt";

            /// 设置http 请求头,直接指向文件
            HttpContext.Current.Response.AddHeader("Content-Disposition",
                "attachment;filename=" + HttpContext.Current.Server.UrlEncode(filename));

            //指定返回的是一个不能被客户端读取的流,必须被下载     
            HttpContext.Current.Response.ContentType = "text/plain"; // 或者 application/ms-txt

            //把文件流发送到客户端
            HttpContext.Current.Response.Write(str.ToString());
            // 停止页面的执行
            HttpContext.Current.Response.End();
        }

  因时间仓促,代码 也有不足之处,如果您有什么好的想法,欢迎提出并与我交流

asp mvc 导出txt 文件泛型方法,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。