所以我使用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 } };
当然,这不是解决这个问题的最好方法。
我怎样才能做到更干净?
答案 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}
}
}
});