ASP.NET MVC 4 ApiController не сериализует все свойства - PullRequest
1 голос
/ 23 февраля 2012

Я тестирую новый ApiController в asp.net mvc 4 beta, но когда я пытаюсь вернуть класс, который выглядит следующим образом, сериализуются только несколько свойств?

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
}

Можно ли получить полный объект, а не только несколько вещей?

1 Ответ

1 голос
/ 23 февраля 2012

Свойства только для чтения не сериализуются.Сделайте установщик свойства Metadata общедоступным, если вы хотите, чтобы оно было сериализовано.Я думаю, что это нормальное поведение для входных параметров, но не для выходных, что в вашем случае.ИМХО, это ошибка, что можно обойти , используя сериализатор JSON, который поддерживает это, но, возможно, они исправят это до окончательного выпуска и позволят сериализовать свойства только для чтения для выходных параметров.это не большая проблема, потому что вы все равно должны использовать модели представлений, поэтому просто сопоставьте вашу модель предметной области с моделью представления и попросите ваш метод вернуть эту модель представления, которая будет содержать только те свойства, которые вам действительно нужны для показа клиенту.Эта модель представления будет содержать свойства с общедоступными геттерами и сеттерами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...