Easiest way to parse "querystring" formatted data Easiest way to parse "querystring" formatted data asp.net asp.net

Easiest way to parse "querystring" formatted data


Pretty easy... Use the HttpUtility.ParseQueryString method.

Untested, but this should work:

var qs = "userID=16555&gameID=60&score=4542.122&time=343114";var parsed = HttpUtility.ParseQueryString(qs);var userId = parsed["userID"]; //  ^^^^^^ Should be "16555".  Note this will be a string of course.


You can do it with linq like this.

string query = "id=3123123&userId=44423&format=json";Dictionary<string,string> dicQueryString =         query.Split('&')             .ToDictionary(c => c.Split('=')[0],                           c => Uri.UnescapeDataString(c.Split('=')[1]));string userId = dicQueryString["userID"];

Edit

If you can use HttpUtility.ParseQueryString then it will be a lot more straight forward and it wont be case-sensitive as in case of LinQ.


As has been mentioned in each of the previous answers, if you are in a context where you can add a dependency to the System.Web library, using HttpUtility.ParseQueryString makes sense. (For reference, the relevant source can be found in the Microsoft Reference Source). However, if this is not possible, I would like to propose the following modification to Adil's answer which accounts for many of the concerns addressed in the comments (such as case sensitivity and duplicate keys):

var q = "userID=16555&gameID=60&score=4542.122&time=343114";var parsed = q.TrimStart('?')    .Split(new[] { '&' }, StringSplitOptions.RemoveEmptyEntries)    .Select(k => k.Split('='))    .Where(k => k.Length == 2)    .ToLookup(a => a[0], a => Uri.UnescapeDataString(a[1])      , StringComparer.OrdinalIgnoreCase);var userId = parsed["userID"].FirstOrDefault();var time = parsed["TIME"].Select(v => (int?)int.Parse(v)).FirstOrDefault();