Easiest way to parse "querystring" formatted data

Viewed 55963

With the following code:

string q = "userID=16555&gameID=60&score=4542.122&time=343114";

What would be the easiest way to parse the values, preferably without writing my own parser? I'm looking for something with the same functionality as Request.querystring["gameID"].

8 Answers

How is this

using System.Text.RegularExpressions;

// query example
//   "name1=value1&name2=value2&name3=value3"
//   "?name1=value1&name2=value2&name3=value3"
private Dictionary<string, string> ParseQuery(string query)
{
    var dic = new Dictionary<string, string>();
    var reg = new Regex("(?:[?&]|^)([^&]+)=([^&]*)");
    var matches = reg.Matches(query);
    foreach (Match match in matches) {
        dic[match.Groups[1].Value] = Uri.UnescapeDataString(match.Groups[2].Value);
    }
    return dic;
}

System.Net.Http ParseQueryString extension method worked for me. I'm using OData query options and trying to parse out some custom parameters.

options.Request.RequestUri.ParseQueryString();

Seems to give me what I need.

HttpUtility.ParseQueryString will work as long as you are in a web app or don't mind including a dependency on System.Web. Another way to do this is:

// NameValueCollection nameValueCollection = HttpUtility.ParseQueryString(queryString);

NameValueCollection nameValueCollection = new NameValueCollection();
string[] querySegments = queryString.Split('&');
foreach(string segment in querySegments)
{
   string[] parts = segment.Split('=');
   if (parts.Length > 0)
   {
      string key = parts[0].Trim(new char[] { '?', ' ' });
      string val = parts[1].Trim();

      nameValueCollection.Add(key, val);
   }
}
Related