too*_*ive 4 c# serialization json dictionary json.net
我有一个课程如下:
public class Usage
{
public string app { get; set; }
public Dictionary<string, string> KVPs { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
当我使用这段代码时:
var json = new JavaScriptSerializer().Serialize(usage);
Run Code Online (Sandbox Code Playgroud)
它给了我这个JSON:
{"app":"myapp", "KVPs":{"k1":"v1", "k2":"v2"}}
Run Code Online (Sandbox Code Playgroud)
我想要它返回这样的东西:
{"app":"myapp", "k1":"v1", "k2":"v2"}
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点?我目前正在使用JavaScriptSerializer.如果有办法使用JSON.Net做到这一点,我愿意切换到那个.
如果您想使用JSON.Net并且您愿意将字典类型更改Dictionary<string, string>为Dictionary<string, object>,那么实现此目的的一种简单方法是将[JsonExtensionData]属性添加到您的字典属性中,如下所示:
public class Usage
{
public string app { get; set; }
[JsonExtensionData]
public Dictionary<string, object> KVPs { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
然后你可以像这样序列化你的对象:
string json = JsonConvert.SerializeObject(usage);
Run Code Online (Sandbox Code Playgroud)
这将为您提供所需的JSON:
{"app":"myapp","k1":"v1","k2":"v2"}
Run Code Online (Sandbox Code Playgroud)
奖励是,Usage如果需要,您可以轻松地将JSON反序列化回您的班级.JSON中与该类成员不匹配的任何属性都将放入KVPs字典中.
Usage usage = JsonConvert.DeserializeObject<Usage>(json);
Run Code Online (Sandbox Code Playgroud)