之前遇到需要在 XML 序列化的過程中忽略值為空值或預設值的欄位, 查了一下才發現不太好找而且做法沒有很直覺.
依字位 (grapheme) 處理字串
以前在處理字串的時候, 不管是反轉或是取字元都沒考慮到有些語言的一個字母可能是由多個字組成的, 直到遇到問題.
舉個越南文的例子, ơ
是由 o
和 ̛
(%cc%9b) 組成的, 所以處理的時候就容易有預料外的結果, 以字串反轉來說, ơa
反轉後變成 a̛o
Flatten JSON
幾年前因為需要將”不固定格式且不可預期”的 JSON 字串轉換成 Dictionary<strin, string>
而做了擴充方法, 但後來發現實作得太複雜了.所以想記錄一下比較簡單的做法.
基於 ASP.NET Core WebAPI 讀取 Request / Response Body
之前在 WebAPI 安全的取得 Request Body 這篇文章有提到讀取 Request Body 的方式, Response 的部分其實大同小異, 且在 ASP.NET Core 中也是相同邏輯(即使實作可能不同), 但有個不同的地方是 ASP.NET Core 中的 request body 預設是讀完無法回捲的(也就是讀完後指標會在 stream 最後面, 無法重複讀取), 且 response body 是唯寫 (WriteOnly) 的, 所以無法讀取, 就需要一點小技巧.
傳遞依賴 (transitive dependency)
為了降低多個專案間的複雜度, 我們通常會謹慎的控制專案之間的依賴, 但在最近新開案的 .NET Core 一系列的新專案中發現傳遞依賴會讓專案之間產生預期外的依賴.
Encoding.UTF8 vs new UTF8Encoding() 和 xml 序列化的可能問題
Encoding.UTF8
和 new UTF8Encoding()
所建立的物件內容是極其相似的, 甚至有些問答網站是說完全一樣, 但實際上有個小小不同的地方, 雖然多數時候不會造成影響, 但前陣子在寫 xml 序列化的測試的時候就出現結果不同的情境, 所以稍微紀錄一下.
跨組件反射的注意事項
問題的起源在於某次搬遷程式碼的時候, 雖然看起來只是將一個方法移動到別的專案, 卻不小心讓一個有使用反射的方法在執行階段拋錯, 雖然查明後發現不是太刁鑽的問題, 但卻是容易不小心出錯的, 所以稍微紀錄一下.
NUnit 中一次性初始化的涵蓋範圍
一般來說套件的使用方式沒什麼好寫的, 但是使用 NUnit 的 OneTimeSetUp 時, 究竟是在多大的範圍做一次性的行為會根據這個特性 (Attribute) 的使用位置而不同, 這部分文件是放在 SetUpFixture Attribute 一節 說明, 不過沒有所有情境的範例程式, 所以做了一些實驗來簡單紀錄一下更細節的部分.