作者热门文章
- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我试过了:
NameValueCollection Data = new NameValueCollection();
Data.Add("foo","baa");
string json = new JavaScriptSerializer().Serialize(Data);
它返回:["foo"]
我期望 {"foo": "baa"}
我该怎么做?
最佳答案
序列化 NameValueCollection 的一种方法是首先将其转换为 Dictionary,然后序列化 Dictionary。转换成字典:
thenvc.AllKeys.ToDictionary(k => k, k => thenvc[k]);
如果需要频繁转换,也可以创建NameValueCollection的扩展方法:
public static class NVCExtender
{
public static IDictionary<string, string> ToDictionary(
this NameValueCollection source)
{
return source.AllKeys.ToDictionary(k => k, k => source[k]);
}
}
所以你可以像这样在一行中进行转换:
NameValueCollection Data = new NameValueCollection();
Data.Add("Foo", "baa");
var dict = Data.ToDictionary();
然后就可以序列化字典了:
var json = new JavaScriptSerializer().Serialize(dict);
// you get {"Foo":"baa"}
但是 NameValueCollection 一个键可以有多个值,例如:
NameValueCollection Data = new NameValueCollection();
Data.Add("Foo", "baa");
Data.Add("Foo", "again?");
如果你序列化它,你会得到 {"Foo":"baa,again?"}
.
您可以修改转换器以生成 IDictionary<string, string[]>
而是:
public static IDictionary<string, string[]> ToDictionary(
this NameValueCollection source)
{
return source.AllKeys.ToDictionary(k => k, k => source.GetValues(k));
}
所以你可以得到这样的序列化值:{"Foo":["baa","again?"]}
.
关于c# - 如何将 NameValueCollection 转换为 JSON 字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7003740/
我是一名优秀的程序员,十分优秀!