ASP.net常用程式碼(持續更新)

駑馬農夫發表於2017-07-30
主題 概要
Asp.net常用程式碼 專案中的優秀程式碼或看到的相關程式碼有時間就隨時記錄
編輯 時間
新建 20170730
新增擴充套件 20170915
序號 參考資料
1
2

每次寫程式碼都要東拼西找,希望把些簡單的程式碼塊放在一起,用的時候方便檢視,僅作備份,並持續更新。

HttpPost請求

指定一個url和請求引數,進行post請求:

 public static string httpPost(string url, string body)
        {
            Encoding encoding = Encoding.UTF8;
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            request.Method = "POST";
            request.Accept = "text/html, application/xhtml+xml, */*";
            request.ContentType = "application/json";

            byte[] buffer = encoding.GetBytes(body);
            request.ContentLength = buffer.Length;
            request.GetRequestStream().Write(buffer, 0, buffer.Length);

            using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())  
            using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
            {
                return reader.ReadToEnd();
            }
        }

其中body的格式為:

{_PrincipalName:"1000003541@chinaexpressair.com",_Count:"10"}

把請求引數字典轉換成body的函式:

public static string toRequestBody(IDictionary<string, string> requestDic)
        {
            StringBuilder ret = new StringBuilder();

            if (0 == requestDic.Count)
            {
                return ret.ToString();
            }

            StringBuilder tempItem = new StringBuilder();
            ret.Append("{");


            foreach (var item in requestDic)
            {
                tempItem.Append(item.Key).Append(":\"").Append(item.Value).Append("\",");                
                ret.Append(tempItem);
                tempItem.Clear();   
            }

            int endIndex = ret.ToString().LastIndexOf(',');
            ret.Remove(ret.ToString().LastIndexOf(','),1);

            //ret.Replace(,);
            ret.Append("}");

            return ret.ToString();
        }

呼叫示例:

IDictionary<string, string> body = new Dictionary<string, string>();
                body.Add("_PrincipalName", principalName);                
                body.Add("_Count", count);
                var bodyStr = RequestHelper.toRequestBody(body);               

                string mailList = RequestHelper.httpPost(getMailUrl, bodyStr);

JSON幫助類

public class JsonHelper
    {
        public static HttpResponseMessage SerializeObjectToHttp(object o)
        {
            string json = JsonConvert.SerializeObject(o);
            return   new HttpResponseMessage { Content = new StringContent(json, System.Text.Encoding.UTF8, "application/json") }; 
        }

        /// <summary>
        /// 將物件序列化為JSON格式
        /// </summary>
        /// <param name="o">物件</param>
        /// <returns>json字串</returns>
        public static string SerializeObject(object o)
        {
            string json = JsonConvert.SerializeObject(o);
            return json;
        }
        /// <summary>
        /// json 轉換為object
        /// </summary>
        /// <param name="json"></param>
        /// <returns></returns>
        public static object DeserializeObject(string json)
        {
            return JsonConvert.DeserializeObject(json);
        }
        /// <summary>
        /// 將物件序列化為JSON格式
        /// </summary>
        /// <param name="o">物件</param>
        /// <returns>json字串</returns>
        public static string SerializeDatatable(DataTable dt)
        {
            //string json = JsonConvert.SerializeObject(dt, new DataTableConverter());
            //return json;
            StringBuilder JsonString = new StringBuilder();
            //Exception Handling          
            if (dt != null && dt.Rows.Count > 0)
            {
                JsonString.Append("[ ");
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    JsonString.Append("{ ");
                    for (int j = 0; j < dt.Columns.Count; j++)
                    {
                        if (j < dt.Columns.Count - 1)
                        {
                            JsonString.Append("\"" + dt.Columns[j].ColumnName.ToString() + "\":" + "\"" + dt.Rows[i][j].ToString() + "\",");
                        }
                        else if (j == dt.Columns.Count - 1)
                        {
                            JsonString.Append("\"" + dt.Columns[j].ColumnName.ToString() + "\":" + "\"" + dt.Rows[i][j].ToString() + "\"");
                        }
                    }
                    /*end Of String*/
                    if (i == dt.Rows.Count - 1)
                    {
                        JsonString.Append("} ");
                    }
                    else
                    {
                        JsonString.Append("}, ");
                    }
                }
                JsonString.Append("]");
                return JsonString.ToString();
            }
            else
            {
                return null;
            }  
        }



        /// <summary>
        /// 解析JSON字串生成物件實體
        /// </summary>
        /// <typeparam name="T">物件型別</typeparam>
        /// <param name="json">json字串(eg.{"ID":"112","Name":"石子兒"})</param>
        /// <returns>物件實體</returns>
        public static T DeserializeJsonToObject<T>(string json) where T : class
        {
            JsonSerializer serializer = new JsonSerializer();
            StringReader sr = new StringReader(json);
            object o = serializer.Deserialize(new JsonTextReader(sr), typeof(T));
            T t = o as T;
            return t;
        }

        /// <summary>
        /// 解析JSON陣列生成物件實體集合
        /// </summary>
        /// <typeparam name="T">物件型別</typeparam>
        /// <param name="json">json陣列字串(eg.[{"ID":"112","Name":"石子兒"}])</param>
        /// <returns>物件實體集合</returns>
        public static List<T> DeserializeJsonToList<T>(string json) where T : class
        {
            JsonSerializer serializer = new JsonSerializer();
            StringReader sr = new StringReader(json);
            object o = serializer.Deserialize(new JsonTextReader(sr), typeof(List<T>));
            List<T> list = o as List<T>;
            return list;
        }

        /// <summary>
        /// 反序列化JSON到給定的匿名物件.
        /// </summary>
        /// <typeparam name="T">匿名物件型別</typeparam>
        /// <param name="json">json字串</param>
        /// <param name="anonymousTypeObject">匿名物件</param>
        /// <returns>匿名物件</returns>
        public static T DeserializeAnonymousType<T>(string json, T anonymousTypeObject)
        {
            T t = JsonConvert.DeserializeAnonymousType(json, anonymousTypeObject);
            return t;
        }

        #region dataTable轉換成Json格式
        /// <summary>      
        /// dataTable轉換成Json格式      
        /// </summary>      
        /// <param name="dt"></param>      
        /// <returns></returns>      
        public static string DataTableToJson(DataTable dt)
        {
            StringBuilder jsonBuilder = new StringBuilder();
            jsonBuilder.Append("{\"");
            jsonBuilder.Append(dt.TableName.ToString());
            jsonBuilder.Append("\":[");
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                jsonBuilder.Append("{");
                for (int j = 0; j < dt.Columns.Count; j++)
                {
                    jsonBuilder.Append("\"");
                    jsonBuilder.Append(dt.Columns[j].ColumnName);
                    jsonBuilder.Append("\":\"");
                    jsonBuilder.Append(dt.Rows[i][j].ToString());
                    jsonBuilder.Append("\",");
                }
                jsonBuilder.Remove(jsonBuilder.Length - 1, 1);
                jsonBuilder.Append("},");
            }
            jsonBuilder.Remove(jsonBuilder.Length - 1, 1);
            jsonBuilder.Append("]");
            jsonBuilder.Append("}");
            return jsonBuilder.ToString();
        }

        #endregion dataTable轉換成Json格式

        #region DataSet轉換成Json格式
        /// <summary>      
        /// DataSet轉換成Json格式      
        /// </summary>      
        /// <param name="ds">DataSet</param>      
        /// <returns></returns>      
        public static string DataSetToJson(DataSet ds)
        {
            StringBuilder json = new StringBuilder();

            foreach (DataTable dt in ds.Tables)
            {
                json.Append("{\"");
                json.Append(dt.TableName);
                json.Append("\":");
                json.Append(DataTableToJson(dt));
                json.Append("}");
            }
            return json.ToString();
        }
        #endregion   
    }

擴充套件方法

Distinct擴充套件

專案中有時要對一個list去重,看到一個很優雅的方法:

public class CommonEqualityComparer<T, V> : IEqualityComparer<T>
    {
        private Func<T, V> keySelector;

        public CommonEqualityComparer(Func<T, V> keySelector)
        {
            this.keySelector = keySelector;
        }

        public bool Equals(T x, T y)
        {
            return EqualityComparer<V>.Default.Equals(keySelector(x), keySelector(y));
        }

        public int GetHashCode(T obj)
        {
            return EqualityComparer<V>.Default.GetHashCode(keySelector(obj));
        }
    }

 public static class DistinctExtensions
    {
        public static IEnumerable<T> Distinct<T, V>(this IEnumerable<T> source, Func<T, V> keySelector)
        {
            return source.Distinct(new CommonEqualityComparer<T, V>(keySelector));
        }
    }

使用示例:

去掉ID值重複的列表

userList = userList.Distinct(u => u.ID).ToList();

相關文章