/// <summary> /// 파일 버전 정보를 분해하여 각 구분별로 숫자로 나타낸다. (major.minor.release.build) /// </summary> /// <param name="version">버전 정보</param> /// <param name="major"></param> /// <param name="minor"></param> /// <param name="release"></param> /// <param name="build"></param> /// <remarks>파싱이 불가능할 때에는 모든 값들이 0이 된다.</remarks> public static void ParseVersion(string version, out int major, out int minor, out int release, out int build) { major = 0; minor = 0; release = 0; build = 0; var versionArray = StringTool.Split(version, '.'); if (versionArray.Length > 0) { major = int.Parse(versionArray[0]); } if (versionArray.Length > 1) { minor = int.Parse(versionArray[1]); } if (versionArray.Length > 2) { release = int.Parse(versionArray[2]); } if (versionArray.Length > 3) { build = int.Parse(versionArray[3]); } if (IsDebugEnabled) { log.Debug("Parse Version:{0} ==> {1}.{2}.{3}.{4}", version, major, minor, release, build); } }
/// <summary> /// Url에서 ? 구분자로 Parameter 반환한다. /// </summary> /// <param name="url"></param> /// <returns></returns> public static NameValueCollection GetParam(string url) { var cols = new System.Collections.Specialized.NameValueCollection(); if (url.IndexOf("?") < 0) { return(cols); } string[] param = GetParams(url); foreach (string pr in param) { string[] p = StringTool.Split(pr, '='); if (p.Length < 2) { continue; } if (string.IsNullOrEmpty(p[0])) { continue; } cols.Add(p[0], (p.Length > 1) ? p[1] : string.Empty); } return(cols); }
/// <summary> /// url의 파라미터 값을 urlEncode /// </summary> /// <param name="url"></param> /// <returns></returns> public static string ParamUrlEncode(string url) { if (url.IndexOf("?") < 0) { return(url); } string[] param = GetParams(url); System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder(); foreach (string pr in param) { string[] p = StringTool.Split(pr, '='); if (p.Length < 2) { continue; } if (string.IsNullOrEmpty(p[0])) { continue; } stringBuilder.AppendFormat("{0}={1}&", p[0], AntiXssTool.UrlEncode((p.Length > 1) ? p[1] : string.Empty)); } return(stringBuilder.ToString()); }
/// <summary> /// Helper function that splits a string containing delimiter separated key value pairs /// into hashtable /// </summary> /// <param name="str">delimiter separated key value pairs</param> /// <param name="delimiters">List of delimiters</param> /// <returns></returns> private static Hashtable ToHashtable(string str, char[] delimiters) { var result = new Hashtable(); if (str.IsWhiteSpace()) { return(result); } if (delimiters == null || delimiters.Length == 0) { return(result); } var strArray = StringTool.Split(str, delimiters[0]); if (delimiters.Length > 1) { foreach (var s in strArray) { var values = s.Split(delimiters[1]); if (values.Length >= 2) { result[values[0].ToLower()] = values[1]; } } } return(result); }
/// <summary> /// 저장된 문자열을 역직렬화하여 객체로 반환한다. /// </summary> /// <param name="compressedBytes">압축 저장된 Data</param> /// <returns></returns> public object Deserialize(byte[] compressedBytes) { if (compressedBytes == null || compressedBytes.Length == 0) { return(null); } try { var savedText = DecompressValue(compressedBytes); if (savedText.IsWhiteSpace()) { return(null); } var texts = StringTool.Split(savedText, JsonSerializableUserType.Delimiter); if (texts.Length != 2) { if (log.IsWarnEnabled) { log.Warn("savedText가 구분자로 구분할 때 [수형] || [JsonText] 형태로 만들어지지 않았습니다. savedText=[{0}]", savedText); } return(null); } var typeText = texts[0]; var jsonText = texts[1]; if (jsonText.IsWhiteSpace()) { return(null); } var type = Type.GetType(typeText, true, true); if (IsDebugEnabled) { log.Debug("Json DeserializeSessionState type=[{0}], content=[{1}]", type.FullName, jsonText.EllipsisChar(255)); } return(JsonTool.DeserializeFromText(jsonText, type)); } catch (Exception ex) { if (log.IsErrorEnabled) { log.Error("Json 역직렬화에 실패했습니다. null을 반환합니다."); log.Error(ex); } } return(null); }
/// <summary> /// 저장된 문자열을 역직렬화하여 객체로 반환한다. /// </summary> /// <param name="savedText"></param> /// <returns></returns> public static object Deserialize(string savedText) { if (savedText.IsWhiteSpace()) { return(null); } var texts = StringTool.Split(savedText, Delimiter); if (texts.Length != 2) { if (log.IsWarnEnabled) { log.Warn("savedText가 구분자로 구분할 때 [수형] || [JsonText] 형태로 만들어지지 않았습니다. savedText=[{0}]", savedText); } return(null); } try { var typeText = texts[0]; var jsonText = texts[1]; if (jsonText.IsWhiteSpace()) { return(null); } var type = Type.GetType(typeText, true, true); if (IsDebugEnabled) { log.Debug("Json DeserializeSessionState type=[{0}], content=[{1}]", type.AssemblyQualifiedName, jsonText.EllipsisChar(255)); } return(JsonTool.DeserializeFromText(jsonText, type)); } catch (Exception ex) { if (log.IsErrorEnabled) { log.Error("Json 역직렬화에 실패했습니다. null을 반환합니다."); log.Error(ex); } } return(null); }
/// <summary> /// 파라미터 값을 변경한다. /// </summary> /// <param name="url"></param> /// <param name="keyName"></param> /// <param name="v"></param> /// <returns></returns> public static string ReplaceParamValue(string url, string keyName, object v) { if (url.IndexOf("?") < 0) { return(url); } string[] param = GetParams(url); url = GetUri(url); System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder(); foreach (string pr in param) { string[] p = StringTool.Split(pr, '='); if (p.Length < 2) { continue; } if (string.IsNullOrEmpty(p[0])) { continue; } if (p[0].ToUpper().Equals(keyName.ToUpper())) { stringBuilder.AppendFormat("{0}={1}&", p[0], (v != null) ? v.ToString() : string.Empty); } else { stringBuilder.AppendFormat("{0}={1}&", p[0], (p.Length > 1) ? p[1] : string.Empty); } } return(url + "?" + stringBuilder); }
/// <summary> /// Url에서 ? 구분자로 Parameter 반환한다. /// </summary> /// <param name="url"></param> /// <returns></returns> public static string[] GetParams(string url) { return(StringTool.Split(GetParamString(url).Replace("&", "&", true), '&')); }