ASP MVC如何以变量名返回json

时间:2014-02-14 09:49:58

标签: c# json

我有这个用户类

public class User
{
    public string name { get; set; }
    public string phone { get; set; }
    public string address { get; set; }
}

var users = new List<User>(){
    new User(){
        name = "Chriss",
        phone = "45096820",
        address = "xxx, street."
    },
    ...
};

如何使用ASP MVC Json方法返回

return Json(users, JsonRequestBehavior.AllowGet);

返回json格式如下所示

"Users"  :
    {
    "Chris" :
        {
            "phone" : "45096820",
            "address" : "xxx, street."
        },
    "Jason" :
        {
            "phone" : "406980968",
            "address" : "xxx, street"
        }
    }   

2 个答案:

答案 0 :(得分:4)

通常,命名最外层JSON变量(根属性,可以这么说)的“技巧”是创建一个具有该属性的匿名对象:

return Json(new { Users = users }, JsonRequestBehavior.AllowGet);

将返回一个包含数组属性(Users)的对象。

如果您需要一个具有一个对象属性(Users)的JSON对象,该属性本身有两个属性(ChrisJason),请考虑使用{ {1}}(密钥是用户名)而不是Dictionary<string, User>

List<User>

Json.NET会将字典序列化为所需的输出JSON格式。

答案 1 :(得分:1)

为了获得完全相同的Json结构,您必须将User类修改为:

public class User
{
    public string phone { get; set; }
    public string address { get; set; }
}

(没有名称,名称将是您词典中的密钥)

并使用词典:

Dictionary<string, User> dictionary = new Dictionary<string, Controllers.User>();
        dictionary.Add("Chris", new User() { phone = "45096820", address = "xxx, street" });
        dictionary.Add("Jason", new User() { phone = "406980968", address = "xxx, street" });
        return Json(new { Users = dictionary }, JsonRequestBehavior.AllowGet);