此代码的结果格式存在问题
public JsonResult getCategorias(int? id)
{
var res = from c in db.Categorias
where (( id.HasValue && c.CategoriaPadre == id.Value) || (!id.HasValue && c.CategoriaPadre == null))
select new { id = c.Id, label = c.Descripcion };
return this.Json(res, JsonRequestBehavior.AllowGet);
}
这会返回json
:
[{"id":21,"label":"Marketing3"},{"id":22,"label":"Marketing4"}]
但我需要一个json
格式:
{"21":"Marketing3","22":"Marketing4"}
我该怎么办?
非常感谢,对不起我的英语。
答案 0 :(得分:3)
将您的回报替换为:
var dictionary = res.ToDictionary(v => v.id, v => label);
return this.Json(dictionary, JsonRequestBehavior.AllowGet);
答案 1 :(得分:2)
当您返回_JsonResult_
时,它会获取对象并自动以这种方式格式化
{
"Property1":"Value1",
"Property2"_"Value2",
...
}
如果您确实需要其他格式,可以从动作中返回_ViewResult_
,添加视图并手动编写json。但是对于这种特殊的格式,你可以使用类似于Garath的答案。
答案 2 :(得分:1)
您也可以使用: -
public static KeyValuePair<string,string> KeyValue(YourClass obj)
{
return new KeyValuePair<string, string>(obj.id, obj.label);
}
致电前
Json(result.ConvertAll(i => KeyValue(i)), JsonRequestBehavior.AllowGet);
答案 3 :(得分:0)
我不知道这是否可以与JsonResult一起使用,但是您可以使用Json.NET并且它支持LINQ(查看“LINQ to JSON \ Creating Json”,因此您的方法将类似于< / p>
public JsonResult getCategorias(int? id)
{
var properties = from c in db.Categorias
where (( id.HasValue && c.CategoriaPadre == id.Value) || (!id.HasValue && c.CategoriaPadre == null))
select JsonProperty(c.Id.ToString(), c.Descripcion);
var res = new JObject(properties.ToArray());
return Content(res.ToString(), "application/json");
}