2012-04-12 72 views
1

我開發了一個非常簡單的WebApi,以測試一些Knockout.js特性。 IMO它應該正常工作,但是當我通過Fiddler向Api發出GET請求時,它根本不返回任何JSON。MVC4 Web Api不序列化我的類

我正在使用MVC4的JSON默認序列化程序。

這是我的模型......

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); 
    } 
} 

...這裏是我的控制器......

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

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

...以防萬一,這是我的回購...

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(); 
    } 
} 

提前感謝!

+0

您的Page類是否具有可序列化屬性? – JonVD 2012-04-12 15:36:02

+0

已經嘗試,但沒有工作......也嘗試過與其他類,但它並沒有訣竅 – faloi 2012-04-12 15:39:07

+0

如果我將頁面的控件類型更改爲列表

,它的工作原理。可能是抽象類的一些問題? – faloi 2012-04-12 15:41:36

回答

1

我改變了默認的序列化程序爲JSON.NET,它的工作。顯然,問題出在默認的序列化器和抽象的控制類上。