将查询字符串转换为.Net中的键值对

时间:2012-03-12 15:22:39

标签: c# asp.net .net

如果我有这样的字符串:

"Name=Irwin&Home=Caribbean&Preference=Coffee"

C#中是否有一个方法可以将其转换为类似于Request.QueryString的键值对?

5 个答案:

答案 0 :(得分:35)

您可以尝试使用HttpUtility.ParseQueryString

var nvc = HttpUtility.ParseQueryString(yourString);

答案 1 :(得分:18)

现在,对于最长的LINQ表达式......

var dict = "Name=Irwin&Home=Caribbean&Preference=Coffee"
    .Split('&')
    .Select(p => p.Split('='))
    .ToDictionary(p => p[0], p => p.Length > 1 ? Uri.UnescapeDataString(p[1]) : null);

但请注意,如果有多个具有相同名称的键,它将会抛出。

如果你想保护自己免受这个添加:

    .GroupBy(p => p[0]).Select(p => p.First())

.ToDictionary之前(以及.Select之后)

这将采用多个key=value中的第一个.First()。将.Last()更改为{{1}}以取最后一个。

答案 2 :(得分:6)

您也可以使用ToDictionary()方法:

var input = "Name=Irwin&Home=Caribbean&Preference=Coffee";
var items = input.Split(new[] { '&' });
var dict = items.Select(item => item.Split(new[] {'='})).ToDictionary(pair => pair[0], pair => pair[1]);

答案 3 :(得分:3)

答案 4 :(得分:1)

你应该能够根据&符号和等号分割这个字符串,然后将每个字符串输入一个新的KeyValuePair:

Dictionary<string, string> myValues = new Dictionary<string,string>();

string[] elements = myString.Split('=','&');

for(int i=0;i<elements.Length; i+=2)
{
   myValues.Add(elements[i], elements[i+1]);
}

这很简单,并且对字符串的格式做了很多假设,但它适用于您的示例。