2016-05-27 31 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} 
      } 
     } 
    }); 
相关问题