Se ho una stringa in questo modo:Converti stringa di query per coppia chiave-valore in .Net
"Name=Irwin&Home=Caribbean&Preference=Coffee"
c'è un metodo in C# che può convertire che a una coppia chiave-valore simile a Request.QueryString ?
Se ho una stringa in questo modo:Converti stringa di query per coppia chiave-valore in .Net
"Name=Irwin&Home=Caribbean&Preference=Coffee"
c'è un metodo in C# che può convertire che a una coppia chiave-valore simile a Request.QueryString ?
Puoi provare a utilizzare HttpUtility.ParseQueryString
.
var nvc = HttpUtility.ParseQueryString(yourString);
Siete alla ricerca di
Si dovrebbe essere in grado di suddividere questa stringa in base ai segni & e uguale segni, quindi alimentare ciascuno in una nuova 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]);
}
Questo è semplicistico e fa molte supposizioni sul formato della stringa, ma funziona per il tuo esempio.
Ed ora, per l'espressione LINQ più lunga ...
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);
ma essere consapevoli che si getterà se ci sono più chiavi con lo stesso nome.
Se si vuole protetti se stessi da questo componente aggiuntivo:
.GroupBy(p => p[0]).Select(p => p.First())
poco prima della .ToDictionary
(e dopo il .Select
)
questo richiederà la prima key=value
di quelli multipli. Cambia .First()
a .Last()
per prendere l'ultimo.
+1 Nel mio caso, più utile della risposta accettata come sto cercando il caso di analizzare uno stile = stringa di chiave: valore [; chiave: valore] ... –
In realtà, non è tutto quel lungo di un Espressione LINQ :-p. Inoltre, se davvero intendesse analizzare una stringa simile a una query, dove sono le chiamate a ['Uri.UnescapeDataString()'] (https://msdn.microsoft.com/en-us/library/system.uri .unescapedatastring% 28V = vs.110% 29.aspx)? – binki
@binki Hai ragione (sul secondo) :-) Aggiunto ... Sulla lunghezza, i posteri decideranno :-) – xanatos
È inoltre possibile utilizzare il metodo 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]);
Questa è la strada da percorrere se non vuoi una dipendenza da System.Web, ad es se stai sviluppando per un'API che immette o emette un formato simile a querystring. –
È utile? http://stackoverflow.com/questions/68624/how-to-parse-a-query-string-into-a-namevaluecollection-in-net – MyDaftQuestions