3

这段代码的结果格式有问题

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"}

我能做些什么?

非常感谢,对不起我的英语。

4

4 回答 4

3

将您的退货替换为:

var dictionary = res.ToDictionary(v => v.id, v => label);
 return this.Json(dictionary, JsonRequestBehavior.AllowGet);
于 2013-04-11T04:09:18.110 回答
2

当您返回 a_JsonResult_时,它会获取对象并以这种方式自动格式化

    {
        "Property1":"Value1",
        "Property2"_"Value2",
        ...
    }

如果你真的需要其他格式,你可以_ViewResult_从你的操作中返回一个,添加一个视图并手动编写 json。但是对于这种特定的格式,您可以使用类似于 Garath 的答案。

于 2013-04-11T04:13:09.477 回答
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);
于 2013-04-11T04:15:12.980 回答
0

我不知道这是否可能与 JsonResult 相关,但您可以使用Json.NET并且它支持 LINQ(查看“LINQ to JSON \ Creating Json”,因此您的方法类似于

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");
}
于 2013-04-11T04:07:59.703 回答