2016-05-27 69 views
0

因此,我使用Dictionary類將C#序列化爲JSON。使用C#字典序列化json查詢字符串

我試圖序列化到這個字符串

{ "User":{ "$inQuery":{ "where":{ "firstName":"plf.UserName" } } } 

我試圖用字典的嵌套組來組裝它。像這樣..

var dict4 = new Dictionary<string, string>() { {"firstName", plf.UserName} }; 
var dict3 = new Dictionary<string, Dictionary<string, string>>() { { "where", dict4 } }; 
var dict2 = new Dictionary<string, Dictionary<string, Dictionary<string, string>>>() { { "$inQuery", dict3 } }; 
var dict1 = new Dictionary<string, Dictionary<string, Dictionary<string, Dictionary<string, string>>>>() {{ "User", dict2 } }; 

當然,這不可能是最好的方式去做這件事。

我該如何做這種清潔劑?

+1

你聽說過[Newtonsoft JSON.Net](http://www.newtonsoft.com/json)嗎? – Blorgbeard

+0

我正在使用它來序列化這些嵌套字典。我如何使用核心JSON.Net庫? –

+2

您只需將對象傳遞給'JsonConvert.SerializeObject' - 爲什麼使用嵌套字典? – Blorgbeard

回答

1

您可以使用匿名類來定義你的JSON結構,像這樣:

var json = JsonConvert.SerializeObject(
    new 
    { 
     User = new 
     { 
      inQuery = new 
      { 
       where = new {firstName = plf.UserName} 
      } 
     } 
    }); 

但是請注意,我不得不從$inQuery刪除$爲工作,因爲C#標識符不能包含一個以美元標誌。

可以覆蓋JSON.Net將使用屬性的名稱,但你不能用匿名類做到這一點 - 你必須定義一個名爲類:

class JsonUser 
{ 
    [JsonProperty("$inQuery")] 
    public object inQuery { get; set; } 
} 

然後你使用它像這樣:

var json = JsonConvert.SerializeObject(
    new 
    { 
     User = new JsonUser 
     { 
      inQuery = new 
      {        
       where = new { firstName = plf.UserName} 
      } 
     } 
    }); 
相關問題