एक तरह से क्रमानुसार करने NameValueCollection पहले यह परिवर्तित करके शब्दकोश और उसके बाद करने के लिए है शब्दकोश serialize। शब्दकोश में बदलने के लिए:
public static class NVCExtender
{
public static IDictionary<string, string> ToDictionary(
this NameValueCollection source)
{
return source.AllKeys.ToDictionary(k => k, k => source[k]);
}
}
ताकि आप एक पंक्ति इस तरह में रूपांतरण कर सकते हैं:
thenvc.AllKeys.ToDictionary(k => k, k => thenvc[k]);
आप अक्सर रूपांतरण करने की ज़रूरत है, तो आप भी NameValueCollection के लिए एक विस्तार विधि बना सकते हैं:
var json = new JavaScriptSerializer().Serialize(dict);
// you get {"Foo":"baa"}
:
NameValueCollection Data = new NameValueCollection();
Data.Add("Foo", "baa");
var dict = Data.ToDictionary();
तो फिर तुम शब्दकोश को क्रमानुसार कर सकते हैं
लेकिन NameValueCollection एक कुंजी के लिए अनेक मान हो सकते हैं, उदाहरण के लिए:
NameValueCollection Data = new NameValueCollection();
Data.Add("Foo", "baa");
Data.Add("Foo", "again?");
आप इस क्रमानुसार यदि आप {"Foo":"baa,again?"}
मिल जाएगा।
आप कनवर्टर संशोधित बजाय IDictionary<string, string[]>
निर्माण करने के लिए कर सकते हैं: {"Foo":["baa","again?"]}
:
public static IDictionary<string, string[]> ToDictionary(
this NameValueCollection source)
{
return source.AllKeys.ToDictionary(k => k, k => source.GetValues(k));
}
तो तुम इस तरह धारावाहिक मूल्य मिल सकता है।
'NameValueCollection' में प्रति कुंजी एकाधिक मान हो सकते हैं, यह उस समस्या को संबोधित नहीं करता है। – zzzzBov
इस विधि से अपवाद का कारण बन जाएगा! NameValueCollection मौजूद क्यों है (और .NET कभी-कभी किसी शब्दकोश का उपयोग नहीं करता है) प्रति कुंजी एकाधिक मानों की अनुमति देना है। एक शब्दकोश के लिए प्रति एक और केवल एक कुंजी की आवश्यकता होती है। –
विधि अपवाद नहीं फेंक देगा। यदि कई कुंजी हैं, तो 'एनवीसी [कुंजी]' उन्हें वापस ',' चरित्र से वापस कर देगा। लेकिन पूर्णता के लिए, मैंने उत्तर को इसके बारे में अधिक स्पष्ट होने के लिए अद्यतन किया। – carlosfigueira