2014-02-28 34 views
4

我有一個類,如下所示:序列化含有字典,使得字典鍵/值呈現爲包含對象的一部分的對象

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來做到這一點,我會願意切換到這一點。

+3

JavaScriptSerializer不是JSON.NET –

+0

哦,對不起,我原來使用JaveScriptSerializer,試着用JSON.net替換它。謝謝 – toosensitive

回答

9

如果你想使用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; } 
} 

然後你可以序列化你的對象是這樣的:

string json = JsonConvert.SerializeObject(usage); 

這會給你想要的JSON:

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

而且獎金,如果需要的話,你可以很容易地反序列化JSON回你Usage類。 JSON中與該類成員不匹配的任何屬性將被放入KVPs字典中。

Usage usage = JsonConvert.DeserializeObject<Usage>(json); 
2

不漂亮,但這樣的工作...

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

謝謝。這將工作 – toosensitive

+0

請點擊小複選標記圖標,如果這是你想接受的答案 –

相關問題