Преобразование строки запроса в пару ключевых значений в .Net

Если у меня есть строка вроде:

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

существует ли метод в С#, который может преобразовать его в пару с ключом-значением, аналогичную Request.QueryString?

Ответ 1

Вы можете попробовать использовать HttpUtility.ParseQueryString.

var nvc = HttpUtility.ParseQueryString(yourString);

Ответ 2

И теперь, для самого длинного выражения 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(), чтобы взять последний.

Ответ 3

Вы также можете использовать метод 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]);

Ответ 5

Вы должны иметь возможность разделить эту строку на основе знаков амперсандов и равных, а затем подать их в новый 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]);
}

Это упрощает и делает много предположений о формате вашей строки, но работает для вашего примера.