我有一个课程如下:
public class Usage
{
public string app { get; set; }
public Dictionary<string, string> KVPs { get; set; }
}
当我使用此代码时:
var json = new JavaScriptSerializer().Serialize(usage);
它给了我这个JSON:
{"app":"myapp", "KVPs":{"k1":"v1", "k2":"v2"}}
我希望它能返回这样的东西:
{"app":"myapp", "k1":"v1", "k2":"v2"}
有办法做到这一点吗?我目前正在使用JavaScriptSerializer
。如果有办法使用JSON.Net做到这一点,我愿意切换到那个。
答案 0 :(得分:9)
如果您想使用JSON.Net并且您愿意将字典类型从Dictionary<string, string>
更改为Dictionary<string, object>
,那么实现此目的的一种简单方法是添加{{1像这样的字典属性的属性:
[JsonExtensionData]
然后你可以这样序列化你的对象:
public class Usage
{
public string app { get; set; }
[JsonExtensionData]
public Dictionary<string, object> KVPs { get; set; }
}
这将为您提供所需的JSON:
string json = JsonConvert.SerializeObject(usage);
奖励是,如果需要,您可以轻松地将JSON反序列化回{"app":"myapp","k1":"v1","k2":"v2"}
课程。 JSON中与该类成员不匹配的任何属性都将放入Usage
字典中。
KVPs
答案 1 :(得分:2)
不漂亮,但这可行......
usage.KVPs["app"] = usage.app;
json = new JavaScriptSerializer().Serialize(usage.KVPs)