Tek yön Sözlüğü serileştirir. sözlüğe dönüştürmek için:
public static class NVCExtender
{
public static IDictionary<string, string> ToDictionary(
this NameValueCollection source)
{
return source.AllKeys.ToDictionary(k => k, k => source[k]);
}
}
yüzden böyle bir çizgide dönüşüm yapabilirsiniz: Sık sık dönüşüm yapmak gerekirse
thenvc.AllKeys.ToDictionary(k => k, k => thenvc[k]);
, ayrıca NameValueCollection bir uzantı yöntemini oluşturabilirsiniz:
var json = new JavaScriptSerializer().Serialize(dict);
// you get {"Foo":"baa"}
:
NameValueCollection Data = new NameValueCollection();
Data.Add("Foo", "baa");
var dict = Data.ToDictionary();
Sonra sözlüğünü serileştirebilirsiniz
Ama NameValueCollection örneğin, bir anahtar için birden fazla değere sahip olabilir: Eğer {"Foo":"baa,again?"}
alacak
NameValueCollection Data = new NameValueCollection();
Data.Add("Foo", "baa");
Data.Add("Foo", "again?");
Bu seri halinde.
yerine IDictionary<string, string[]>
üretmek için dönüştürücü değiştirebilirsiniz: {"Foo":["baa","again?"]}
:
public static IDictionary<string, string[]> ToDictionary(
this NameValueCollection source)
{
return source.AllKeys.ToDictionary(k => k, k => source.GetValues(k));
}
Yani böyle tefrika değer elde edebilirsiniz.
'NameValueCollection' anahtar başına birden çok değere sahip olabilir, bu, bu sorunu ele almaz. – zzzzBov
Bu yöntem büyük olasılıkla istisnalara neden olur! NameValueCollection'ın (ve .NET'in bazen bir sözlük kullanmıyor) olmasının nedeni, anahtar başına birden çok değere izin verilmesidir. Bir sözlük, değer başına bir ve sadece bir anahtar gerektirir. –
Yöntem, bir istisna alamaz. Birden fazla anahtar varsa, 'nvc [key]' sadece bir ',' karakteriyle birleştirilenleri döndürür. Ama bütünlük adına, cevabı daha açık bir şekilde güncelledim. – carlosfigueira