2012-04-12 4 views
1

Knockout.jsの機能をテストするために非常に簡単なWebApiを開発しました。 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クラスはSerializable属性で修飾されていますか? – JonVD

+0

既に試してみましたが、うまくいきませんでした...他のクラスでも試してみましたが、トリックはしませんでした – faloi

+0

ページのコントロールタイプをリスト

に変更すると動作します。抽象クラスに何か問題がありますか? – faloi

答えて

1

デフォルトのシリアライザをJSON.NETに変更しました。どうやら、問題はデフォルトのシリアライザと抽象的なControlクラスの問題でした。

関連する問題