1

asp.net mvc 4ベータ版で新しいApiControllerをテストしていますが、次のようなクラスを返そうとすると、いくつかのプロパティのみがシリアル化されますか?

public class PageModel : IPageModel {
    public string Id { get; set; }
    public virtual IPageMetadata Metadata { get; private set; }
    public PageModel() {
        Metadata = new PageMetadata();
    }
}

これは私のAPIコントローラーのコードです

    // GET /api/pages/5
    public PageModel Get(string id) {
        return new PageModel { Id = "pages/1", Metadata = {Name = "Foo"} };
    }

これが結果です

{
Id: "pages/1",
Parent: null
}

いくつかのものだけでなく、完全なオブジェクトを取得することは可能ですか?

4

1 に答える 1

1

読み取り専用プロパティはシリアル化されません。Metadataシリアル化する場合は、プロパティのセッターを公開します。この動作は入力パラメーターでは正常であると思いますが、出力ではそうではありません。IMHOは、これをサポートするJSONシリアライザーを使用することで回避できるバグですが、最終リリースの前に修正され、出力パラメーターの読み取り専用プロパティをシリアル化できるようになる可能性があります。

とにかくビューモデルを使用する必要があるため、実際には大きな問題ではありません。ドメインモデルをビューモデルにマップし、実際にクライアントに公開する必要のあるプロパティのみを含むこのビューモデルをメソッドに返すようにします。このビューモデルには、パブリックゲッターとセッターのプロパティが含まれます。

于 2012-02-23T19:48:34.367 に答える