2016-08-23 24 views
0

Ich benutze Entity-Framework, um Daten aus der Datenbank zu erhalten und serialisieren sie zu JSON. Und ich möchte, dass meine JSON-Antwort wie folgt aussieht. Shoud ich hinzufügen items Eigenschaft zu meinem Modell und machen JSON ich will? Vielen Dank.Wie komplexe Json-Objekt in asp.net mvc zurückgegeben werden

Desired Json

{ 
     "items" : [ 
     { 
      "Id": 1, 
      "AdContent":"Content1" 
     }, 
     { 
      "Id": 2, 
      "AdContent":"Content2" 
     }, 
     { 
      "Id": 3, 
      "AdContent":"Content3" 
     } 
     ] 
} 

Aktuelle JSON Ich erhalte

[ 
    { 
     "Id":1, 
     "AdContent":"Content1" 
    }, 
    { 
     "Id":2, 
     "AdContent":"Content2" 
    }, 
    { 
     "Id":3, 
     "AdContent":"Content3" 
    } 
] 

{ 

-Controller

public JsonResult GetJson() 
{ 
    using (var db = new DoskaUsContext()) 
    { 
     List<AdViewModel> list = db.Ads.Select(x => new AdViewModel 
     { 
      Id = x.AdId,      
      AdContent = x.AdContent 
     }).ToList(); 

     return Json(list, JsonRequestBehavior.AllowGet); 
    } 
} 

Modell

public class AdViewModel 
    { 
     public int Id { get; set; } 
     public string AdContent { get; set; }   
    } 
+1

'Rückkehr Json (neu {items = list}, JsonRequestBehavior.AllowGet);' –

Antwort

3

anonymes Objekt ist eine Lösung Json(new {items=list},...).

Allgemeiner Ansatz, um dieses Problem zu lösen - generieren stark typisierte Klassen mit http://json2csharp.com/ und füllen Ergebnis über generierte Klassen oder zumindest sehen, was in Ihrem Code fehlt.

In diesem speziellen Fall generierten Code:

public class Item 
{ 
    public int Id { get; set; } 
    public string AdContent { get; set; } 
} 

public class RootObject 
{ 
    public List<Item> items { get; set; } 
} 

Welche fehlende Stück des Puzzles zeigt - RootObject mit Listeneigenschaft items.

1

ein anderes Modell erstellen, die Sammlung von AdViewModel als Elemente halten

public class AdViewModel 
    { 
     public int Id { get; set; } 
     public string AdContent { get; set; }   
    } 

public class NewModel 
    { 
     public AdViewModel items { get; set; } 
    } 
Verwandte Themen