2011-02-26 50 views
27

我需要得到:序列化.NET詞典<字符串,字符串>成JSON鍵值對對象

public class Package 
{ 
    public Package() 
    { 
     name = ""; 
     type = new List<Dictionary<string, string>>(); 
    } 

    public string name { get; set; } 
    public List<Dictionary<string, string>> type { get; set; } 
} 

到:

{ 
    "name":"package_name", 
    "type": 
    { 
     "http://random.url.as.key":"random/value" 
    } 
} 

有:

Package package = new Package(); 
package.name = "package_name"; 
package.type.Add(new Dictionary<string, string>() { { "http://random.url.as.key", "random/value" } }); 

我得到:

{ 
    "name":"package_name", 
    "type": 
    [ 
     [ 
      { 
       "Key":"http:\/\/random.url.as.key", 
       "Value":"random\/value" 
      } 
     ] 
    ] 
} 

同時,與:

var package = new 
{ 
    name = "package_name", 
    type = new 
    { 
     http_random_url_as_key = "random/value" 
    } 
}; 

我得到:

{ 
    "name":"package_name", 
    "type": 
    { 
     "http_random_url_as_key":"random/value" 
    } 
} 

我不能得到的語意含混HTTP://random.url.as.key,我需要。我曾嘗試使用JavaScriptSerializer,DataContractJsonSerializer, Json.NET的自定義轉換器,所有成功/缺陷都很有限。

必須有更好的方法/我忽略了一個簡單的JSON對象,通過電線!

+0

? – Vadim 2011-02-26 03:43:46

+3

你首先'Package'類不會被編譯。你確定field * type *是一個'List >'嗎?在轉換爲JSON時,您似乎希望它像'Dictionary 一樣執行。 – 2011-02-26 03:46:19

+0

使用它將.net代碼序列化爲JSON並還原。 http://james.newtonking.com/projects/json-net.aspx – Deepak 2011-02-26 05:03:27

回答

45

那麼,首先,對於第一個示例,您基本上擁有的是KeyValuePair<string,string>對象的集合列表。

所以,它被轉換爲顯示的JSON的原因是這樣的:

{ 
    "name":"package_name", 
    "type": 
    [ // List<Dictionary<string,string>> 
     [ // Dictionary<string,string>, a list of KeyValuePair<string,string> objects 
      { // KeyValuePair<string,string> object 
       "Key":"http:\/\/random.url.as.key", 
       "Value":"random\/value" 
      } 
     ] 
    ] 
} 

至於你的第二個例子,你正在創建一個動態的對象,包含動態對象,每個對象的領域是什麼提供了關鍵價值。

所以,我建議拋棄外List<>Dictionary<string,string>周圍,然後利用Newtonsoft.Json.Converters.KeyValuePairConverter對象在JSON.Net庫做你的序列化時:

string json = JsonConvert.SerializeObject(package, new KeyValuePairConverter()); 

希望有所幫助。

編輯

好了,所以我想我應該給一個更具體的例子

public class Package 
{ 
    public Package() 
    { 
     name = ""; 
     type = new Dictionary<string, string>(); 
    } 

    public string name { get; set; } 
    public Dictionary<string, string> type { get; set; } 
} 

Package package = new Package(); 
package.name = "package_name"; 
package.type.Add("http://random.url.as.key", "random/value"); 
string json = JsonConvert.SerializeObject(package, new KeyValuePairConverter()); 

這將讓你什麼是您使用序列化到JSON輸出

{ 
    "name":"package_name", 
    "type": 
    { 
     "http://random.url.as.key":"random/value" 
    } 
} 
+0

如果我想同時具有wcf和json端點,這個代碼如何適合? – 2011-11-25 06:53:22

相關問題