带有collectionname的jsonResult

时间:2016-12-13 10:27:59

标签: c# json asp.net-mvc

您好我想在角度转发器中使用以下代码中的json集合。 我需要给这个集合命名,但我不知道如何

这是生成JSON的代码

        public JsonResult GetProducts()
        {
             var result = db.Products.ToList();

             var list = JsonConvert.SerializeObject(result, Formatting.None,   new JsonSerializerSettings(){ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore});

             return Json(list,JsonRequestBehavior.AllowGet);
    }

这是结果

[{
"Category": {
    "ID": 4,
    "Name": "TEST"
},
"OrderDetails": [],
"ID": 10006,
"Description": "TEST",
"Name": "TEST",
"Price": 3.20,
"PictureUrl":"",
"CategoryId": 4,
"AddedToShop": "2016-12-11T14:52:57.677"
},
{
"Category": {
    "ID": 4,
    "Name": "TEST"
},
"OrderDetails": [],
"ID": 20005,
"Description": "TEST2",
"Name": "TEST2",
"Price": 3.20,
"PictureUrl":"",
"CategoryId": 4,
"AddedToShop": "2016-12-12T12:02:10.593"
}]

我希望它像下面的代码,所以我可以使用products标签进行迭代。

{
"products": [{
"Category": {
    "ID": 4,
    "Name": "TEST"
},
"OrderDetails": [],
"ID": 10006,
"Description": "TEST",
"Name": "TEST",
"Price": 3.20,
"PictureUrl":"",
"CategoryId": 4,
"AddedToShop": "2016-12-11T14:52:57.677"
},
{
"Category": {
    "ID": 4,
    "Name": "TEST"
},
"OrderDetails": [],
"ID": 20005,
"Description": "TEST2",
"Name": "TEST2",
"Price": 3.20,
"PictureUrl":"",
"CategoryId": 4,
"AddedToShop": "2016-12-12T12:02:10.593"
}]}

3 个答案:

答案 0 :(得分:0)

您的问题的一个解决方案是,定义一个单独的类,并将该类的属性定义为类型的集合或列表" db.Products"(使用此对象的相应类名作为你有代码),当你序列化那个对象时,你会得到它,就像你要求的那样

class ProductList
{
public Collection<YourType> Products{get; set;}
}

OR

class ProductList
{
public List<YourType> Products{get; set;}
}

答案 1 :(得分:0)

您可以使用

var list = JsonConvert.SerializeObject(new { products = result }, Formatting.None, new JsonSerializerSettings() { ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore });

答案 2 :(得分:0)

如果您使用的是WebAPI控制器,则无需发送JsonResult,您只需创建一个类并将其发送回客户端:

public class MyClass
{
  public List<Product> Products { get; set; }    
}

在你的控制器中:

public MyClass Get() {
   return new MyClass {
      Products = db.Products.ToList()
   };        
}

OR:

只需创建对象,然后在序列化程序中传递它:

JsonConvert.SerializeObject( { "products": result }, Formatting.None, new JsonSerializerSettings(){ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore})