中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

WebApi系列(lie)~按(an)需序列(lie)化字段~Hot

回到目錄

起初只是一個想法,一次討論,一個設想,但相信一定可以實現,具體的事情是這樣的,有個對外的API項目,它為一些終端設備提供數據,如手機,平板,PC,當然你也可以說它為很多平臺提供數據win32,mac,ios,android,對于PC設備來說,接口返回的數據量當然沒有那么敏感,但對于移動設備,對這點要求就高些,不需要的數據請不要為我返回,因為那么會發費我很多流量!

是的,這是2010年到未來(lai)某個時期(qi)的熱門話(hua)題,網絡帶(dai)寬(kuan)是收(shou)費(fei)(fei)的,不要(yao)隨便浪費(fei)(fei)!

第一次想法失敗了

終端-〉請求數據包-〉服務端接口接改(gai)并(bing)(bing)處理-〉數據返回并(bing)(bing)過濾無(wu)用字段

這個(ge)模型在(zai)我的(de)大腦里呈現,但經過實踐的(de)證明,很遺憾,它是無法實現的(de),因(yin)為(wei)(wei)你不(bu)(bu)能為(wei)(wei)每個(ge)屬性(xing)動(dong)態(tai)去添加一(yi)種(zhong)叫做JsonIgnore的(de)特(te)(te)性(xing)(不(bu)(bu)會被序列化(hua)),因(yin)為(wei)(wei)這種(zhong)特(te)(te)性(xing)屬于(yu)一(yi)種(zhong)元信息(xi),我們在(zai)程序運行時,只(zhi)能獲取它,設置它的(de)值(zhi),而不(bu)(bu)能添加或者(zhe)移除它(反(fan)射(she)),當(dang)然,你可以從(cong)新動(dong)態(tai)創建一(yi)個(ge)類,一(yi)個(ge)類的(de)方法和屬性(xing)(Emit)

第二次想法成功了

數(shu)據(ju)層(ceng)和業務層(ceng)在服(fu)務端去(qu)干(gan)自己(ji)的(de)(de)事(shi),返(fan)回(hui)自己(ji)完整(zheng)的(de)(de)數(shu)據(ju)吧,我(wo)不(bu)(bu)去(qu)關(guan)心它(ta),我(wo)關(guan)心的(de)(de)是在API返(fan)回(hui)數(shu)據(ju)時的(de)(de)動作(序(xu)(xu)列化),所(suo)以第(di)二(er)(er)次想法出來了(le)(le),將實體對(dui)象在進(jin)行(xing)JSON序(xu)(xu)列化時進(jin)行(xing)加工,將不(bu)(bu)需(xu)要的(de)(de)字段(duan)從JSON字符(fu)串中去(qu)掉,就OK了(le)(le),注(zhu)意本代碼(ma)只是第(di)一版(ban),目前(qian)還不(bu)(bu)支(zhi)持JSON的(de)(de)嵌套屬性,這(zhe)個遞歸我(wo)打算在第(di)二(er)(er)版(ban)再實現它(ta),呵呵,不(bu)(bu)想讓它(ta)太復雜!

下面是我的代碼

        /// <summary>
        /// 功能:集合按需要序列化
        /// author:倉儲大叔
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="list"></param>
        /// <param name="fun"></param>
        /// <returns></returns>
        public static string ToJson(this object type, params string[] param)
        {
            StringBuilder buffer = new StringBuilder();
            if (type.GetType().Name == "List`1")
            {
                buffer.Insert(0, "[");
                foreach (var t in (IEnumerable<object>)type)
                {
                    GeneratorJsonStr(buffer, t, param);
                }
                buffer.Append("]");
            }
            else
            {
                GeneratorJsonStr(buffer, type, param);
            }
            return buffer.ToString();
        }
        /// <summary>
        /// 為對象生成Json字符(fu)串
        /// </summary>
        /// <param name="buffer"></param>
        /// <param name="t"></param>
        /// <param name="param"></param>
        static void GeneratorJsonStr(StringBuilder buffer, object t, params string[] param)
        {
            var obj = new List<string>();
            foreach (var item in param)
            {
                var p = t.GetType().GetProperty(item, BindingFlags.Public | BindingFlags.Instance | BindingFlags.IgnoreCase);
                if (p != null)
                {
                    if (p.PropertyType == typeof(string))
                        obj.Add(p.Name + ":\"" + p.GetValue(t) + "\"");
                    else
                        obj.Add(p.Name + ":" + p.GetValue(t));
                }
            }
            if (obj.Count > 0)
                buffer.Append("{" + string.Join(",", obj) + "}");
        }

 

感謝您的閱讀!

回到目錄

posted @ 2015-11-10 22:20  張占嶺  閱讀(3862)  評論(2)    收藏  舉報