2012-04-12 6 views
1

Ich habe ein sehr einfaches WebApi entwickelt, um einige Knockout.js Funktionen zu testen. IMO sollte es richtig funktionieren, aber wenn ich eine GET-Anfrage an die API über Fiddler mache, gibt es überhaupt kein JSON zurück.MVC4 Web Api serialisiert meine Klasse nicht

Ich verwende MVC4 JSON Standard Serializer.

Das ist mein Modell ...

public class Page 
{ 
    public string Name { get; set; } 
    public List<Control> Controls { get; set; }   
} 

public abstract class Control 
{ 
    public string Name { get; set; } 
    public abstract string SayHi(); 
} 

public class Form : Control 
{ 
    public override string SayHi() 
    { 
     return string.Format("Hi, I'm form {0}", Name); 
    } 
} 

public class Datagrid : Control 
{ 
    public override string SayHi() 
    { 
     return string.Format("Hi, I'm datagrid {0}", Name); 
    } 
} 

... hier ist mein Controller ...

public class PageController : ApiController 
{ 
    static readonly ISimplePageRepository _repository = new TestPageRepository(); 

    // GET /api/page 
    public IEnumerable<Page> GetAllPages() 
    { 
     return _repository.GetAll(); 
    } 
} 

... und nur für den Fall, das ist mein Repo ...

public class TestPageRepository : ISimplePageRepository 
{ 
    private List<Page> _pages = new List<Page>(); 

    public TestPageRepository() 
    { 
     Add(new Page {Name = "pagina1", Controls = new List<Control>() {new Datagrid() {Name = "laTablita"}}}); 
     Add(new Page {Name = "pagina2", Controls = new List<Control>() {new Form() {Name = "elFormito"}}}); 
    } 

    public Page Add(Page item) 
    { 
     _pages.Add(item); 
     return item; 
    } 

    public IEnumerable<Page> GetAll() 
    { 
     return _pages.AsQueryable(); 
    } 
} 

Vielen Dank im Voraus!

+0

Ist Ihre Page-Klasse mit einem Serializable-Attribut versehen? – JonVD

+0

Bereits versucht, aber nicht funktioniert ... auch mit den anderen Klassen versucht, aber es hat nicht den Trick – faloi

+0

Wenn ich Seite Controls Typ zu einer Liste

ändern, funktioniert es. Könnte ein Problem mit der abstrakten Klasse auftreten? – faloi

Antwort

1

Ich habe den Standard-Serializer zu JSON.NET geändert und es hat funktioniert. Anscheinend war das Problem mit dem Standard-Serializer und der abstrakten Steuerelementklasse.

Verwandte Themen