這個題目其實蠻簡單的,有時後會需要將接收到的 QueryString 再加以處理,因為 QueryString 是屬於 NameValue 的結構,如下:
ID=12345678&FirstName=OOO&LastName=xxx如果 QueryString 的內容不是又臭又長的時候,可以直接使用 HttpUtility.ParseQueryString() 方法將 QueryString 轉換為 NameValueCollection,然後可以依據 Name 來取得 Value 的內容。
但需要將 QueryString 轉成指定型別的物件呢?好像沒有內建的方法是可以直接將 NameValueCollection 轉成物件,不過還是有方法可以做這樣的處理,只是需要多做幾次簡單的轉換處理而已。
HttpUtility.ParseQueryString
http://msdn.microsoft.com/zh-tw/library/ms150046(v=vs.110).aspx
使用 UTF8 編碼,將查詢字串剖析為 NameValueCollection。
看一個簡單的操作就可以知道怎麼使用,
那如果我們有定義一個型別,並且希望接收到的 QueryString 能夠轉換成這一個型別的物件時,應該怎麼處理呢?
這邊我使用 Json.NET 來做進一步的處理,因為我們已經可以使用 HttpUtility.ParseQueryString() 取得 NameValueCollection,而我們可以使用 Json.NET 的 JsonConvert.SerialObject() 方法將 NameValueCollection 先轉為 JSON 字串,
可以轉成 JSON 字串之後就可以使用 JsonConvert.DeserializeObject<T>() 方法將 JSON 字串反序列化成指定行別的物件,
最後將中間轉換的處理抽出來做成一個 Helper 方法,就可以重複的使用,
會這樣處理的需求是因為有時候我們所接收到的 QueryString 是有多組 Name Value 所組成的,如果還用一個一個組裝成物件的方式就會蠻累的,尤其是這樣的處理在系統中時常出現的時候,開發人員就會覺得厭煩,這個時候就可以用這樣的處理方式來省略這些煩人的工作。
參考連結:
Json.NET Document - JsonConvert.SerializeObject()
Json.NET Document - JsonConvert.DeserializeObject<T>()
以上
忘了補充說明,我用的是 LINQPad,之前 Workshop 也有介紹過喔
回覆刪除除了可以用來練習與測試 LINQ 操作之外,也可以作為簡易的 C# 編輯器,
部落格有文章介紹.
現在才發現NameValueCollection不能序列化...OTZ
回覆刪除