亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

json格式數據分析工具PageElement類分享(仿Session寫法)

2020-01-24 02:59:01
字體:
來源:轉載
供稿:網友

測試例:

復制代碼 代碼如下:

PageElement pe = new PageElement();
pe.LoadDataFromJsonString("[{/"A/":/"123/",/"B/":/"abc/"}]");
Console.WriteLine(pe["A"]); --輸出123
pe["B"]=1000;
Console.WriteLine(pe["B"]); --輸出1000

pe.DATATABLE:獲取數據的 DataTable 形式
pe.ToInsertSQL 轉SQL INSERT語句
pe.ToUpdateSQL 轉SQL UPDATE語句

復制代碼 代碼如下:

namespace MyLib.ITSM.Base
{
    using System;
    using System.Collections.Generic;
    using System.Xml;
    using System.Data;
    using System.Data.Common;
    using System.Data.SqlClient;

    public class PageElement : IDictionary<string, object>
    {
        public List<KeyValuePair<string, object>> list = new List<KeyValuePair<string, object>>();

        public PageElement() { }

        public PageElement(string XmlString)
        {
            LoadElementFromXMLString(XmlString);
        }

        /// <summary>
        /// JSON屬性
        /// </summary>
        public string JSON
        {
            get
            {
                if (list == null || list.Count == 0) return string.Empty;
                {
                    string jsonstr = "{";
                    foreach (KeyValuePair<string, object> p in list)
                    {
                        jsonstr += p.Key + ":" + "/"" + p.Value.ToString() + "/",";
                    }
                    jsonstr = jsonstr.Substring(0, jsonstr.Length - 1);//去除最后一個逗號
                    jsonstr += "}";
                    return jsonstr;
                }
            }
        }

        /// <summary>
        /// 是否已加載數據
        /// </summary>
        private bool _isloaded = false;
        public bool IsLoaded
        {
            get
            {
                return _isloaded;
            }
        }

        #region IDictionary<string,object> 成員

        void IDictionary<string, object>.Add(string key, object value)
        {
            //key已存在,則不添加
            foreach (KeyValuePair<string, object> k in list)
            {
                if (k.Key == key.Trim() || k.Key.ToLowerInvariant() == key.ToLowerInvariant().Trim())
                {
                    return;
                }
            }
            //向List中添加
            list.Add(new KeyValuePair<string, object>(key, value));
        }

        public bool ContainsKey(string key)
        {
            foreach (KeyValuePair<string, object> k in list)
            {
                if (k.Key == key.Trim() || k.Key.ToLowerInvariant() == key.ToLowerInvariant().Trim())
                {
                    return true;
                }
            }
            return false;
        }

        public ICollection<string> Keys
        {
            get
            {
                string[] ks = new string[list.Count];
                for (int i = 0; i < list.Count; i++)
                {
                    ks[i] = list[i].Key;
                }
                return ks;
            }
        }

        public bool Remove(string key)
        {
            foreach (KeyValuePair<string, object> k in list)
            {
                if (k.Key == key.Trim() || k.Key.ToLowerInvariant() == key.ToLowerInvariant().Trim())
                {
                    list.Remove(k);
                    return true;
                }
            }
            return false;
        }

        public bool TryGetValue(string key, out object value)
        {
            foreach (KeyValuePair<string, object> k in list)
            {
                if (k.Key == key.Trim() || k.Key.ToLowerInvariant() == key.ToLowerInvariant().Trim())
                {
                    value = k.Value;
                    return true;
                }
            }
            value = string.Empty;
            return false;
        }

        public ICollection<object> Values
        {
            get
            {
                object[] vs = new object[list.Count];
                for (int i = 0; i < list.Count; i++)
                {
                    vs[i] = list[i].Value;
                }
                return vs;
            }
        }

        public object this[string key]
        {
            get
            {
                foreach (KeyValuePair<string, object> k in list)
                {
                    if (k.Key == key.Trim() || k.Key.ToLowerInvariant() == key.ToLowerInvariant().Trim())
                    {
                        return k.Value;
                    }
                }
                return null;
            }
            set
            {
                foreach (KeyValuePair<string, object> k in list)
                {
                    if (k.Key == key.Trim() || k.Key.ToLowerInvariant() == key.ToLowerInvariant().Trim())
                    {
                        list.Remove(k);//刪除原節點
                        break;
                    }
                }
                KeyValuePair<string, object> knew = new KeyValuePair<string, object>(key, value);
                list.Add(knew);
            }
        }

        public object this[int index]
        {
            get
            {
                if (index <= list.Count)
                {
                    return list[index].Value;
                }
                return null;
            }
            set
            {
                string key;
                if (index <= list.Count)
                {
                    key = list[index].Key.ToString();
                    list.RemoveAt(index);
                    KeyValuePair<string, object> knew = new KeyValuePair<string, object>(key, value);
                    list.Insert(index, knew);
                }
            }
        }

        #endregion

        #region ICollection<KeyValuePair<string,string>> 成員

        public void Add(KeyValuePair<string, object> item)
        {
            throw new NotImplementedException();
        }

        public void Clear()
        {
            list = new List<KeyValuePair<string, object>>();
        }

        public bool Contains(KeyValuePair<string, object> item)
        {
            foreach (KeyValuePair<string, object> k in list)
            {
                if (k.Key == item.Key)
                {
                    return true;
                }
            }
            return false;
        }

        public void CopyTo(KeyValuePair<string, object>[] array, int arrayIndex)
        {
            throw new NotImplementedException();
        }

        public int Count
        {
            get { return list.Count; }
        }

        public bool IsReadOnly
        {
            get { throw new NotImplementedException(); }
        }

        public bool Remove(KeyValuePair<string, object> item)
        {
            foreach (KeyValuePair<string, object> k in list)
            {
                if (k.Key == item.Key)
                {
                    list.Remove(k);
                    return true;
                }
            }
            return false;
        }

        #endregion

        #region IEnumerable<KeyValuePair<string,string>> 成員

        public IEnumerator<KeyValuePair<string, object>> GetEnumerator()
        {
            return list.GetEnumerator();
        }

        #endregion

        #region IEnumerable 成員

        System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
        {
            return list.GetEnumerator();
        }

        #endregion

        public override string ToString()
        {
            return JSON;
        }

        /// <summary>
        /// 轉為FieldValue值
        /// </summary>
        /// <returns></returns>
        public XmlDocument GetXmlObject()
        {
            //FieldValues fvs = new FieldValues();
            //foreach (KeyValuePair<string, object> p in list)
            //{
            //    fvs.Add(p.Key, p.Value.ToString());
            //}
            //return fvs.GetXmlObject();
            return null;
        }

        /// <summary>
        /// 從XML中載入頁面元素數據
        /// </summary>
        /// <param name="xmlstr"></param>
        public void LoadElementFromXMLString(string xmlstr)
        {
            _isloaded = false;
            //try
            //{
            //    FieldValues fvs = new FieldValues(xmlstr);
            //    foreach (FieldValue fv in fvs)
            //    {
            //        this[fv.ID] = fv.Value;
            //    }
            //}
            //catch { return; }
            _isloaded = true;
        }

        /// <summary>
        /// 從DataTable中載入頁面元素數據
        /// </summary>
        /// <param name="xmlstr"></param>
        public void LoadElementFromDataTable(DataTable dt)
        {
            _isloaded = false;
            try
            {
                if (dt != null)
                {
                    foreach (DataRow row in dt.Rows)
                    {
                        //遍歷行
                        foreach (DataColumn dc in dt.Columns)
                        {
                            this[dc.ColumnName] = row[dc];
                        }
                    }
                }
            }
            catch { return; }
            _isloaded = true;
        }
        /// <summary>
        /// 從JSON中載入頁面元素數據
        /// </summary>
        /// <param name="xmlstr"></param>
        public void LoadElementFromJSONString(string json)
        {
            _isloaded = false;
            try
            {
                List<string> jsList = GetFieldsString(json);
                //生成列
                foreach (string s in jsList)
                {
                    string[] keyvalueSeparator = { ":" };
                    string key = s.Substring(0, s.IndexOf(':')).Trim();
                    string value = s.Substring(s.IndexOf(':') + 1).Trim();
                    if (key.Trim().StartsWith("/"") && key.Trim().EndsWith("/""))
                    {
                        //去除多余的雙引號
                        int end = key.Length - 2;
                        key = key.Substring(1, end);
                    }
                    if (value.Trim().StartsWith("/"") && value.Trim().EndsWith("/""))
                    {
                        //去除多余的雙引號
                        int end = value.Length - 2;
                        value = value.Substring(1, end);
                        //PageElement類型的內容
                        if (value.StartsWith("{") && value.EndsWith("}"))
                        {
                            value = value.Replace("http://", string.Empty);//祛除多余轉義符
                            PageElement peChild = new PageElement();
                            peChild.LoadElementFromJSONString(value);
                            this[key] = peChild;
                        }
                        else  //普通類型的內容解析
                        {
                            //若列值存在
                            this[key] = ConvertToGB(value);
                        }
                    }
                }
            }
            catch
            {
                return;
            }
            _isloaded = true;
        }

        /// <summary>  
        /// 把Unicode解碼為普通文字  
        /// </summary>  
        /// <param name="unicodeString">要解碼的Unicode字符集</param>  
        /// <returns>解碼后的字符串</returns>  
        private string ConvertToGB(string unicodeString)
        {
            string[] strArray = unicodeString.Split(new string[] { @"/u" }, StringSplitOptions.None);
            string result = string.Empty;
            for (int i = 0; i < strArray.Length; i++)
            {
                if (strArray[i].Trim() == "" || strArray[i].Length < 2 || strArray.Length <= 1)
                {
                    result += i == 0 ? strArray[i] : @"/u" + strArray[i];
                    continue;
                }
                for (int j = strArray[i].Length > 4 ? 4 : strArray[i].Length; j >= 2; j--)
                {
                    try
                    {
                        result += char.ConvertFromUtf32(Convert.ToInt32(strArray[i].Substring(0, j), 16)) + strArray[i].Substring(j);
                        break;
                    }
                    catch
                    {
                        continue;
                    }
                }
            }
            return result;
        }

        /// <summary>
        /// 獲取字段Json字符串
        /// </summary>
        /// <param name="json"></param>
        /// <returns></returns>
        private List<string> GetFieldsString(string jsonS)
        {
            List<string> retfieldsstring = new List<string>();
            if (jsonS == string.Empty)
                return retfieldsstring;
            string json = jsonS.Trim();
            //祛除首尾
            if (json.StartsWith("[") && json.EndsWith("]"))
            {
                int length = json.Length - 2;
                json = json.Substring(1, length);
            }

            //是json格式的字串,以{開頭,以}結尾
            if (json.StartsWith("{") && json.EndsWith("}"))
            {
                int jsonlength = json.Length - 1;
                string str = json.Substring(1, jsonlength - 1) + ",";
                //祛除頭尾的"{","}"
                int startPos = 0; //搜索開始的位置指針
                int length = 0;  //搜索結束的位置指針
                int flagcount = 0; //對象開始字符的個數,根據此個數排除結束標志
                //遍歷得到內部字符串
                while (startPos + length < str.Length)  //未搜索完成,則繼續搜索
                {
                    if (str[startPos + length] == '{')
                    {
                        flagcount += 1;
                    }
                    else if (str[startPos + length] == '}')
                    {
                        if (flagcount > 0)  //若開始字符的個數不等于0,則字符中間存在對象,應將標志位減1并且排除
                        {
                            flagcount -= 1;
                        }
                    }
                    else if (str[startPos + length] == ',')
                    {
                        if (flagcount == 0)
                        {
                            retfieldsstring.Add(str.Substring(startPos, length));
                            startPos = startPos + length + 1;//新的起始位置
                            length = 0; //新的截取長度
                        }
                    }
                    length += 1; //末尾指針加1,進入下一次循環的搜索
                }
                return retfieldsstring;
            }
            return retfieldsstring;
        }

        /// <summary>
        /// 轉為Sql Insert 語句
        /// </summary>
        /// <param name="TableName"></param>
        /// <returns></returns>
        public string ToInsertSQL(string TableName)
        {
            string sql = @"INSERT INTO " + TableName + "(";
            string fields = string.Empty;
            string values = string.Empty;
            foreach (KeyValuePair<string, object> p in list)
            {
                fields += p.Key + ",";
                //values += StringTool.SqlQ(p.Value.ToString()) + ",";
            }
            fields = fields.Substring(0, fields.Length - 1);//去除最后一個逗號
            values = values.Substring(0, values.Length - 1);//去除最后一個逗號
            sql += fields + ") VALUES (" + values + ")";
            return sql;
        }

        /// <summary>
        /// 轉為Sql Update 語句
        /// </summary>
        /// <param name="TableName"></param>
        /// <returns></returns>
        public string ToUpdateSQL(string TableName, string wherefield)
        {
            string sql = @"UPDATE " + TableName + " Set ";
            foreach (KeyValuePair<string, object> p in list)
            {
                //sql += p.Key + " = " + StringTool.SqlQ(p.Value.ToString()) + ",";
            }
            sql = sql.Substring(0, sql.Length - 1);//去除最后一個逗號
            //sql += " WHERE " + wherefield + " = " + StringTool.SqlQ(this[wherefield].ToString());
            return sql;
        }

        /// <summary>
        /// 轉為Sql 查詢 語句
        /// </summary>
        /// <param name="TableName"></param>
        /// <returns></returns>
        public object[] ToWhereSQL()
        {
            object[] o = new object[2];
            string sql = @" where 1=1 ";
            DbParameter[] dbp = new DbParameter[list.Count];
            int index = 0;
            foreach (KeyValuePair<string, object> f in list)
            {
                if (f.Value is string)
                {
                    if (!f.Key.Contains("#"))
                    {
                        sql += " and " + f.Key + " like '%'+@" + f.Key + "+'%'";
                    }
                    else
                    {
                        string op = f.Key.Split('#')[1].ToString();
                        if (op.Trim() == "L") //前半部相配
                        {
                            sql += " and " + f.Key.Split('#')[0] + " like '%'+@" + f.Key + "";
                        }
                        else if (op.Trim() == "R") //后半部相配
                        {
                            sql += " and " + f.Key.Split('#')[0] + " like  @" + f.Key + "+'%'";
                        }
                        else if (op.Trim() == "E")  //字符串相等
                        {
                            sql += " and " + f.Key.Split('#')[0] + " = @" + f.Key;
                        }
                    }
                }
                if (f.Value is int || f.Value is decimal || f.Value is double)
                {
                    if (!f.Key.Contains("#")) //無條件,直接帶入
                    {
                        sql += " and " + f.Key + " = @" + f.Key;
                    }
                    else
                    {
                        string op = f.Key.Split('#')[1].ToString();
                        if (op.Trim() == "G") //大于
                        {
                            sql += " and " + f.Key.Split('#')[0] + " > @" + f.Key;
                        }
                        else if (op.Trim() == "L") //小于
                        {
                            sql += " and " + f.Key.Split('#')[0] + " < @" + f.Key;
                        }
                        else if (op.Trim() == "NE") //不等于
                        {
                            sql += " and " + f.Key.Split('#')[0] + " <> @" + f.Key;
                        }
                        else if (op.Trim() == "GE") //大于等于
                        {
                            sql += " and " + f.Key.Split('#')[0] + " >= @" + f.Key;
                        }
                        else if (op.Trim() == "LE") //小于等于
                        {
                            sql += " and " + f.Key.Split('#')[0] + " <= @" + f.Key;
                        }
                        else if (op.Trim() == "E")
                        {
                            sql += " or " + f.Key.Split('#')[0] + " = @" + f.Key;
                        }
                    }
                }
                SqlParameter sp = new SqlParameter(f.Key, f.Value);
                dbp[index] = sp;
                index += 1;
            }
            o[0] = sql;
            o[1] = dbp;
            return o;
        }


    }
}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲视频自拍偷拍| 亚洲精品suv精品一区二区| 91视频免费在线| 欧美激情亚洲综合一区| 亚洲美女在线视频| 亚洲国产精品推荐| 超碰97人人做人人爱少妇| 亚洲最大在线视频| 国产精品爱久久久久久久| 国产精品高清网站| 国产精品久久久久999| 亚洲日本aⅴ片在线观看香蕉| 亚洲精品一区av在线播放| 国产精品天天狠天天看| 国产69精品99久久久久久宅男| 欧美视频在线观看 亚洲欧| 亚洲精品有码在线| 国产精品久久久av| 欧美野外wwwxxx| 97视频在线播放| 国内精品在线一区| 国产精品久久久久久久9999| 国内外成人免费激情在线视频| 国产又爽又黄的激情精品视频| 国产大片精品免费永久看nba| 国产精品激情自拍| 亚洲在线免费观看| 欧美日韩美女视频| 亚洲国产欧美久久| 2018国产精品视频| 国产精品免费视频xxxx| 欧美午夜电影在线| 日韩美女免费视频| 美日韩精品视频免费看| 欧美性猛xxx| 91在线视频导航| 久久精品国产亚洲7777| 91在线观看免费高清完整版在线观看| 欧美极品美女视频网站在线观看免费| 日韩欧美主播在线| 亚洲欧美在线免费| 久久久久免费视频| 91精品国产91| 精品露脸国产偷人在视频| 日本久久中文字幕| 亚洲有声小说3d| 国产精品久久久久久久久免费| 精品国产自在精品国产浪潮| 欧美激情综合亚洲一二区| 欧美在线视频一二三| 亚洲sss综合天堂久久| 国产精品国产三级国产aⅴ浪潮| 91亚洲精品久久久久久久久久久久| 国产日韩av在线| 亚洲一级片在线看| 亚洲欧美日韩综合| 亚洲第一网中文字幕| 欧美黄色免费网站| 亚洲97在线观看| 国产成人综合一区二区三区| 日韩视频免费观看| 日本成人在线视频网址| 成人久久一区二区| 久久成人18免费网站| 成人精品一区二区三区| 亚洲老板91色精品久久| 亚洲精品99久久久久| 亚洲网站视频福利| 亚洲精品国产成人| 欧美激情videoshd| 亚洲国产天堂久久综合网| 色悠悠国产精品| 成人国产精品久久久久久亚洲| 日韩美女写真福利在线观看| 亚州国产精品久久久| 国产精品日韩在线| 亚洲精品美女网站| 欧美成人免费在线视频| 91精品国产91久久久久久| 精品国产乱码久久久久酒店| 美日韩精品免费观看视频| 国产日韩在线视频| 日本精品性网站在线观看| 亚洲一区美女视频在线观看免费| 亚洲欧洲中文天堂| 中文字幕在线看视频国产欧美在线看完整| 91黄色8090| 国产区精品视频| 日本高清视频精品| 亚洲影视九九影院在线观看| 亚洲xxx视频| 午夜精品一区二区三区在线视频| 亚洲图片在线综合| 一本一本久久a久久精品牛牛影视| 国产精品美女av| 欧美另类极品videosbest最新版本| www日韩欧美| 国产在线拍揄自揄视频不卡99| 日韩精品在线视频| 国产午夜精品视频免费不卡69堂| 国产精品入口尤物| 亚洲欧美激情视频| 亚洲视频网站在线观看| 欧美影院成年免费版| 日韩av免费在线观看| 亚洲第一中文字幕在线观看| 国产精品网站大全| 亚洲在线观看视频| 精品国产一区av| 国产在线999| 一区二区三区动漫| 日韩综合视频在线观看| 欧美日韩国产综合视频在线观看中文| 欧美多人爱爱视频网站| 精品人伦一区二区三区蜜桃网站| 成人国产精品一区二区| 欧美日本高清一区| 久久久视频在线| 欧美大尺度电影在线观看| 国产视频自拍一区| 欧美日韩精品中文字幕| 日韩精品久久久久| 欧美日韩国产中文精品字幕自在自线| 国产一区二区免费| 国内精品免费午夜毛片| 2019中文字幕在线| 欧美日本国产在线| 亚洲男人天堂九九视频| 国产亚洲日本欧美韩国| 欧洲成人午夜免费大片| 成人日韩在线电影| 亚洲视频777| 欧美视频中文字幕在线| 色多多国产成人永久免费网站| 精品动漫一区二区三区| 欧美久久精品一级黑人c片| 91亚洲精品在线| 亚洲老司机av| 欧美整片在线观看| 久久久久久美女| 国产日本欧美一区二区三区| 亚洲人成绝费网站色www| 日韩女优在线播放| 成人国产在线视频| 国产亚洲精品久久久久久牛牛| 亚洲在线视频观看| 在线看片第一页欧美| 国产不卡精品视男人的天堂| 国产成人精品视| xxxx欧美18另类的高清| 国产精品男女猛烈高潮激情| 日韩精品电影网| 欧美丰满少妇xxxxx做受| 欧美大胆在线视频| 亚洲www在线观看| 国产欧美精品在线播放| 欧美日韩国产一区中文午夜| 欧美野外猛男的大粗鳮| 91国在线精品国内播放| 欧美一区二区三区免费观看| 亚洲国产欧美一区二区三区同亚洲| 欧美成人精品一区| 亚洲精选在线观看| 国产午夜精品理论片a级探花|