2012-03-12 11 views

risposta

32

Puoi provare a utilizzare HttpUtility.ParseQueryString.

var nvc = HttpUtility.ParseQueryString(yourString); 
+1

Non è necessario creare un nuovo NVC, poiché 'ParseQueryString' restituisce quel tipo già . – Oded

+0

@Oded, hai ragione, mio ​​errore. Grazie. – Brandon

+0

Ma anche se non fa parte del profilo cliente, questo potrebbe essere un problema. (Inserito prima di aver individuato il tag ASP.NET). –

1

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.

15

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.

+0

+1 Nel mio caso, più utile della risposta accettata come sto cercando il caso di analizzare uno stile = stringa di chiave: valore [; chiave: valore] ... –

+0

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

+1

@binki Hai ragione (sul secondo) :-) Aggiunto ... Sulla lunghezza, i posteri decideranno :-) – xanatos

4

È 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]); 
+0

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. –