Browse by Tags

【答客問】Json.NET-動態決定屬性是否序列化
昨天提到 Json.NET屬性序列化設定 ,接獲讀者森哥留言: 請問黑大, 針對不需要序列化的「屬性」是否可以透過程式「動態」設定或是過濾? 有預感遲早也會遇到這個 靠杯 火盃的考驗,決定打鐵趁熱,馬上來練習。所幸,Json.NET真的很強大,早就料想到此一需求,提供 ContractResolver 以實現神乎奇技的高度動態化。 我寫了一個範例,展示兩種動態決定應序列化屬性的情境: Serialize時傳入屬性名稱陣列作為參數,正向表列JSON應包含的屬性。 由物件屬性值決定屬性是否要序列化,例如...
Posted 04 September 2013 09:26 PMJeffrey | 6 comment(s) 9,328
Filed under: ,
Json.NET技巧兩則: 忽略屬性及列舉轉字串
開發主戰場漸漸移到前端,應用Json.NET的深度也逐步增加。今天學會Json.NET技巧兩則,筆記如下: 情境1: 待序列化物件的部分屬性純粹供.NET端應用,不需傳到前端,希望能予以排除以縮短JSON字串,減少頻寬浪費。 解決方案 方法1 - 在屬性加上[JsonIgnore],負向表列哪些屬性不要序列化。 方法2 - 在類別加上[DataContract],為需序列化屬性加上[DataMember],正向表列哪些屬性需要序列化。 參考: Efficient JSON with Json.NET...
Posted 03 September 2013 11:01 PMJeffrey | 2 comment(s) 13,835
Filed under: ,
CODE-封裝Office繁簡轉換服務
手邊的專案涉及多國語系,之前研究過 使用Excel維護多國語系字串資源檔 ,意外發現Office的繁簡轉換功能威猛過人,不單只是置換字元編碼,還能做到 詞彙轉換 ,將字彙轉換成對應的說法,例如: 交易資料->事务数据、預設記憶體->默认内存... 等等,放著神兵利器不用,豈不暴殄天物? 於是,延續先前開發 Word套表服務 的概念,裝著Word當引擎的裝甲車登場囉~ 程式碼的重點在於Word Document物件的共用與資源確實回收(操作Office Interop的注意事項先前也 討論過...
Posted 15 August 2013 09:22 PMJeffrey | with no comments 9,022
Filed under: ,
使用自訂確認對話框取代window.confirm
專案規格有一條 機車 要求: 對於刪除或覆寫資料前的確認程序,希望以自訂風格的確認對話框取代簡陋的window.confirm()。 舉例來說,按鈕後原本要透過window.confirm()請使用者確認後再執行,現在要改用自訂HTML元素呈現確認文字、按鈕進行確認,就如以下改用Kendo UI Window實作確認對話框的效果: 用HTML打造自訂對話框並在適當時機顯示是小事一椿,較有挑戰性的部分是原本window.confirm()執行為同步式,程式碼會停住等使用者回應再繼續往下走。想依confirm...
Posted 03 August 2013 10:36 AMJeffrey | 6 comment(s) 33,753
Filed under: ,
使用Excel維護多國語系字串資源檔
針對多國語系,.NET提供了不錯的解決方案 -- 透過.resx資源檔定義字串,透過ResourceManager或Visual Studio自動產生對應的類別[ *.Designer.cs ]取用。要新增語系支援,只需增加該語系的resx檔,提供各項目對應的文字,配合CultureInfo切換就能輕易切換語系顯示。(延伸閱讀: 逐步解說:使用資源進行 ASP.NET 的當地語系化 ) 像是以下這個例子: 這個例子也剛好突顯維護多國語系常見的困擾。Message.resx中有四個項目,Message...
Posted 02 July 2013 11:34 PMJeffrey | 3 comment(s) 14,370
Filed under: ,
CODE-將匿名型別陣列匯成CSV
工作的專案有個小需求,使用者羅列了一堆報表匯出需求,基上都是從現存LINQ資料集合以不同條件取出不同欄位。 我想到最簡便的做法是套用Where()查詢,依需求產生匿名型別 Select(o => new {     欄位1 = o.PropA,     欄位2 = o.PropB,     欄位3 = o.PropC … }) 連欄位名稱都隨使用者指定,最後再將查詢結果轉為CSV,幾個步驟就搞定一項報表需求...
Posted 01 May 2013 07:21 AMJeffrey | 3 comment(s) 8,586
Filed under: ,
【答客問】耗時Stored Procedure的ASP.NET Postback進度回報寫法
【問題】 在 耗時ASP.NET Postback的傻瓜進度回報 一文,雖然示範了跑迴圈定期呼叫ReportProgress委派傳回進度的貼心做法,實務上卻難以實現,例如: 某個Stored Procedure要跑一分鐘,在IDbCommand.ExecuteNonQuery()執行結束前,根本什麼都不能做,又如何能定期丟進度給前端? les.Execute( sender as Button, (rp) => { //模擬執行很耗時的作業 for ( int i = 0; i < 5;...
Posted 15 April 2013 11:30 PMJeffrey | with no comments 8,937
Filed under: ,
【答客問】信件標題解碼範例
網友 提問 ,希望了解 中文編碼解析工具 關於信件標題(如=?x-gbk?q?=B5=C4=B7=AD=D2=EB?=)的解碼邏輯,特整理為程式範例並加註說明如下: using System; using System.Text; using System.Text.RegularExpressions; using System.Web;   namespace ConsoleApplication1 { class Program { static void Main( string...
Posted 11 April 2013 09:23 PMJeffrey | with no comments 5,104
Filed under: ,
CODE-自動產生程式碼時將System.Int32轉為int
這是我在寫程式碼產生器常遇到的小困擾。例如: 當透過Reflection偵測型別轉成屬性型別宣告時,typeof(T).ToString()會產生如"System.String"的完整型別名稱,故不時會出現如下的產出結果: public class Player { public System.String Name { get; set; } public System.Int32 Score { get; set; } ....略.... 有沒有覺得程式碼裡充滿System...
Posted 06 March 2013 09:01 PMJeffrey | 1 comment(s) 5,768
Filed under:
CODE-縮短版GUID字串
頗特殊的需求: 一個跨平台整合在傳遞以GUID為Primary Key資料時,對方的參數欄位只接受最長30個字元,即使使用16進位數字表示法(例如: 4854c292c333480890f916d1a062b8e3),GUID字串也長達32字元,超出限制。另外想一種不會重複的識別編號法則是種解法,但要做到GUID等級的唯一性得付出不少代價。因此,另一個思考方向是如何用較短的字串長度表示GUID,評估是較省力的做法。 要比16進位表示法更簡短,最簡便的做法是將其GUID先轉為byte[],再用Base64編碼轉為字串...
Posted 29 January 2013 10:44 PMJeffrey | 6 comment(s) 15,454
Filed under: ,
防止程式同時執行多份,比檢查Process清單更好的方法
在某些情境下,我們需要限制同一支程式同時間只能執行一份,很直覺的想法是檢查Process清單,由程式名稱在清單中出現一次以上來判斷是否已有同名程式在執行。這個做法直覺有效,在大部分情境也適用,甚至在CodeProject上也不乏類似" 教學範例 ",很自然地,這也一度是我愛用過的解法(誰沒有過去呢?);但是,檢查Process清單並非是最簡潔嚴謹的做法。(前述CodeProject文章的評比只有一顆星,留言中不乏負評,這故事告訴我們,爬文時莫急莫慌,至少先看看鄉民怎麼說再決定要不要抄...
Posted 15 January 2013 09:23 PMJeffrey | 4 comment(s) 24,510
Filed under: ,
使用Open XML SDK保護工作表不被修改
在先前 測試 中,Open XML SDK是唯一挑戰ReportViewer匯出Excel檔修改成功的程式庫,手邊的下一步需求是要將工作表(Worksheet)設為不可修改。 在Open XML SDK中,有個 SheetProtection 類別,將其加入xlsx的XML結構,就可向應用程式宣告該工作表允許或禁止的操作,例如: 刪除欄(deleteColumns)、重設儲存格格式(formatCells)、插入列(insertRow)... 等等。在SheetProctection設定可以指定解除鎖定的密碼雜湊值...
Posted 28 December 2012 06:03 AMJeffrey | with no comments 8,156
Filed under: , ,
CODE-呼叫命令列程式並即時接收輸出
之前 學過 透過RedirectStandardOutput設定,可在.NET呼叫其他命令列程式並接收其顯示內容的技巧。這回則有額外需求,由於某個命令列轉檔工具執行耗時(可能長達數分鐘),故進行期間會持續輸出進度資訊讓使用者安心,但依以前StandardOutput.ReadToEnd()的做法,.NET呼叫端只能在數分鐘後一次取得全部顯示結果,無法即時掌握處理進度,使用者體驗大大扣分。 研究之後,發現貼心的.NET BCL早有因應對策: OutputDataReceived ! 做法是先在Process...
Posted 04 December 2012 09:01 AMJeffrey | with no comments 9,222
Filed under: ,
5碼郵遞區號轉3碼JSON,一場LINQ花式操槍表演
一開始,我只是為了某個Knockout程式範例,打算花十分鐘把 3+2郵遞區號XML轉檔程式 稍做整理,改寫成輸出3碼資料JSON而已,沒想到魔鬼都在細節裡,資料裡幾則特殊案例,搞得我手忙腳亂汗水直滴,最後花了一個半小時才達成目的,驗證傳說中"工程師預估的時程 根本是放屁 只能純參考"所言不虛... 故事是這樣的,中華郵政網站可以 下載 3碼郵遞區號表(Text、Word及Excel格式)及3+2碼郵遞區號資料檔(Text, Excel, XML),要用程式處理,XML顯然是較佳的資料來源...
Posted 02 September 2012 03:57 PMJeffrey | 5 comment(s) 17,213
Filed under: ,
物件序列化之舉手之勞省空間
分享一下最近學會的序列化壓縮技巧。 情境如下,查詢資料庫後取得List<User>物件,打算透過序列化成檔案的方式保存,方便日後能快速還原回List<User>查詢比對,以達到離線使用的目標。 在.NET要玩序列化不過是小事一樁,只要針對類別建構出DataContractSerializer物件,再搭配FileStream,一個SerializeObject()指令就能將物件儲存成檔案,還原時也只要一個Read()指令就搞定,十分方便。 以下程式模擬了一個20萬筆資料的巨型集合物件...
Posted 07 June 2012 11:26 PMJeffrey | 5 comment(s) 15,995
Filed under: ,
更多文章 « 上一頁 - 下一頁 »

搜尋

Go

<September 2018>
SunMonTueWedThuFriSat
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456
 
RSS
創用 CC 授權條款
【廣告】
twMVC
最新回應

Tags 分類檢視
關於作者

一個醉心技術又酷愛分享的Coding魔人,十年的IT職場生涯,寫過系統、管過專案, 也帶過團隊,最後還是無怨無悔地選擇了技術鑽研這條路,近年來則以做一個"有為的中年人"自許。

文章典藏
其他功能

這個部落格


Syndication