使用C#Dictionary序列化json查询字符串

时间:2016-05-27 01:09:59

标签: c# json dictionary

所以我使用Dictionary类将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 个答案:

答案 0 :(得分:1)

您可以使用匿名类来定义JSON结构,如下所示:

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

但请注意,由于C#标识符不能包含美元符号,因此必须从$中移除$inQuery才能生效。

您可以覆盖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}
            }
        }
    });