Jeśli mam ciąg tak:Konwersja string zapytanie do pary klucz-wartość w .NET
"Name=Irwin&Home=Caribbean&Preference=Coffee"
istnieje metoda w C#, które można przekonwertować do pary klucz-wartość podobną do Request.QueryString ?
Jeśli mam ciąg tak:Konwersja string zapytanie do pary klucz-wartość w .NET
"Name=Irwin&Home=Caribbean&Preference=Coffee"
istnieje metoda w C#, które można przekonwertować do pary klucz-wartość podobną do Request.QueryString ?
Możesz spróbować użyć numeru HttpUtility.ParseQueryString
.
var nvc = HttpUtility.ParseQueryString(yourString);
Powinieneś móc podzielić ten ciąg na podstawie ampersandów i równa się oznaki, a następnie karmić każdy w nowej 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]);
}
Jest to uproszczone i zawiera wiele założeń dotyczących formatu ciągu znaków, ale działa na Twój przykład.
A teraz, po najdłuższym wyrażeniu 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);
Ale należy pamiętać, że będzie rzucać jeśli istnieje wiele klucze o tej samej nazwie.
Jeśli chcesz chronić siebie od tego dodatku:
.GroupBy(p => p[0]).Select(p => p.First())
tuż przed .ToDictionary
(i po .Select
)
to zajmie pierwsze key=value
z wieloma z nich. Zmień .First()
na .Last()
, aby wziąć ostatni.
+1 W moim przypadku bardziej przydatne niż zaakceptowana odpowiedź, ponieważ szukam przypadku parsowania stylu = ciąg klucza: wartość [; klucz: wartość] ... –
Właściwie to nie jest tak długo Wyrażenie LINQ: -p. Ponadto, jeśli to naprawdę miało zamiar parsować łańcuch podobny do zapytania, gdzie są wywołania do ['Uri.UnescapeDataString()'] (https://msdn.microsoft.com/en-us/library/system.uri .unescapedatastring% 28v = vs.110% 29.aspx)? – binki
@binki Masz rację (na drugim) :-) Dodano ... O długości decyduje potomność :-) – xanatos
Można również użyć() metoda 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]);
To jest droga, jeśli nie chcesz mieć zależności od System.Web, np jeśli pracujesz nad interfejsem API, który wprowadza lub wyprowadza format podobny do kwerendy. –
Czy to była pomocna? http://stackoverflow.com/questions/68624/how-to-parse-a-query-string-into-a-namevaluecollection-in-net – MyDaftQuestions