試煉24 - dynamic技巧2 無中生有

2022 鐵人賽文 搬回點部落

開始試煉

有沒有遇到過 拿到的json格式
有很多狀態 然後狀態都是用1,2,3代表意義
像是
OpenStatus 1表示OOO,2表示XXX
CloseStatus 1表示XXX,2表示YYY
BackStatus 1表示あああ,2表示わわわ
然後每次在除錯的時候都要放個對照表 要不然就是要背起來

這時候很想再寫一個物件然後只是為了翻譯那些狀態
這時候就可以用dynamic無中生有的技巧

如何無中生有

使用ExpandoObject 還不知道人 先到下方練等
既然要動態就動個痛快 - ExpandoObject

var demo = GetDemo();
dynamic reply = new System.Dynamic.ExpandoObject();
reply.Status = demo.Status;
reply.Message = demo.Message;
reply.OpenStatus = demo.OpenStatus.Value;
reply.CloseStatus = demo.CloseStatus.Value;
reply.BackStatus = demo.BackStatus.Value;
reply.Result = demo;

ViewBag.Json = Newtonsoft.Json.JsonConvert.SerializeObject(reply)

demo.OpenStatus.Value 有用到Ardalis.SmartEnum套件
.Value就會拿到對應的中文狀態
這樣你就不需要建立class 就可以產出好識別問題的json了
可以得到類似這樣的結果
 

延伸試煉

在網頁上顯示json的套件
jquery.json-viewer
https://github.com/abodelot/jquery.json-viewer

結束試煉

學會這技巧後 以後處理複雜json時 容易許多

Tell, Don’t Ask
此原則的概念是:

不要取出物件狀態再決定要怎麼做。
而是直接告訴物件要做什麼事。
如此一來,可以封裝狀態,簡化邏輯。

Tell, Don’t Ask

TellDontAsk

如果內容有誤請多鞭策謝謝