網頁

2013年12月28日 星期六

練習題 - 將 QueryString 字串轉換為指定型別的物件

這個題目其實蠻簡單的,有時後會需要將接收到的 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。

看一個簡單的操作就可以知道怎麼使用,

image

 

那如果我們有定義一個型別,並且希望接收到的 QueryString 能夠轉換成這一個型別的物件時,應該怎麼處理呢?

image

這邊我使用 Json.NET 來做進一步的處理,因為我們已經可以使用 HttpUtility.ParseQueryString() 取得 NameValueCollection,而我們可以使用 Json.NET 的 JsonConvert.SerialObject() 方法將 NameValueCollection 先轉為 JSON 字串,

image

可以轉成 JSON 字串之後就可以使用 JsonConvert.DeserializeObject<T>() 方法將 JSON 字串反序列化成指定行別的物件,

image

最後將中間轉換的處理抽出來做成一個 Helper 方法,就可以重複的使用,

image

 

會這樣處理的需求是因為有時候我們所接收到的 QueryString 是有多組 Name Value 所組成的,如果還用一個一個組裝成物件的方式就會蠻累的,尤其是這樣的處理在系統中時常出現的時候,開發人員就會覺得厭煩,這個時候就可以用這樣的處理方式來省略這些煩人的工作。

 

參考連結:

Json.NET Document  - JsonConvert.SerializeObject()

Json.NET Document - JsonConvert.DeserializeObject<T>()

http://stackoverflow.com/questions/18711721/jsonconvert-deserializeobjecttjsonstring-returning-all-propertiest-as-null

 

以上

2 則留言:

  1. 忘了補充說明,我用的是 LINQPad,之前 Workshop 也有介紹過喔
    除了可以用來練習與測試 LINQ 操作之外,也可以作為簡易的 C# 編輯器,
    部落格有文章介紹.

    回覆刪除
  2. 現在才發現NameValueCollection不能序列化...OTZ

    回覆刪除