C# 序列化包含字典的对象,以便字典键/值作为包含对象的一部分呈现

C# 序列化包含字典的对象,以便字典键/值作为包含对象的一部分呈现,c#,json,dictionary,serialization,json.net,C#,Json,Dictionary,Serialization,Json.net,我的课程如下: public class Usage { public string app { get; set; } public Dictionary<string, string> KVPs { get; set; } } 它给了我这个JSON: {"app":"myapp", "KVPs":{"k1":"v1", "k2":"v2"}} 我希望它能返回如下内容: {"app":"myapp", "k1":"v1", "k2":"v2"} 有办法做到这

我的课程如下:

public class Usage
{
    public string app { get; set; }

    public Dictionary<string, string> KVPs { get; set; }
}
它给了我这个JSON:

{"app":"myapp", "KVPs":{"k1":"v1", "k2":"v2"}}
我希望它能返回如下内容:

{"app":"myapp", "k1":"v1", "k2":"v2"}

有办法做到这一点吗?我目前正在使用
JavaScriptSerializer
。如果有一种方法可以使用JSON.Net实现这一点,我愿意切换到这一点。

不太好,但这会奏效

usage.KVPs["app"] = usage.app;
json = new JavaScriptSerializer().Serialize(usage.KVPs)

如果您想使用JSON.Net,并且愿意将词典的类型从
dictionary
更改为
dictionary
,那么一种简单的方法是将
[JsonExtensionData]
属性添加到dictionary属性中,如下所示:

public class Usage
{
    public string app { get; set; }

    [JsonExtensionData]
    public Dictionary<string, object> KVPs { get; set; }
}
string json = JsonConvert.SerializeObject(usage);
这将为您提供所需的JSON:

{"app":"myapp","k1":"v1","k2":"v2"}
另外,如果需要的话,您可以将JSON反序列化回您的
用法
类。JSON中与类成员不匹配的任何属性都将放入
KVPs
字典中

Usage usage = JsonConvert.DeserializeObject<Usage>(json);
用法=JsonConvert.DeserializeObject(json);
JavaScriptSerializer不是JSON.net哦,对不起,我原来使用的是JaveScriptSerializer,试着用JSON.net替换它。谢谢,谢谢。如果这是您想要接受的答案,请单击小复选标记图标
Usage usage = JsonConvert.DeserializeObject<Usage>(json);