Стек: MVC5, WebAPI, OData, EF6
В контроллере MVC я возвращаю объект, сериализованный в объект JSON:
.Select(s => new ProjectEditorDTO()
{
// projection
WebsiteId = s.WebsiteId,
WebsiteGUID = s.WebsiteGUID,
WebsiteName = s.WebsiteName,
WebsiteNotes = s.WebsiteNotes,
Test = "some test string",
DefaultContentType = new ContentTypeDTO
{
ContentTypeId = s.DefaultContentTypeID,
Description = s.ContentType.Description
}
});
var r = results.ToList(); // contains DefaultContentType object
return Ok(results, results.GetType());
Проблема в том, что когда я просматриваю возвращенные данные в Fiddler, внутри объекта JSON отсутствуют данные DefaultContentType
.
У меня есть другой контроллер, который использует тот же объект (отдельно) и отлично возвращается.
К вашему сведению, вот ContentTypeDTO
:
public class ContentTypeDTO
{
public int ContentTypeId { get; set; }
[Required]
[StringLength(100, MinimumLength=3)]
[Display(Name="Content Type")]
public string Description { get; set; }
//public int NumberOfContentTypes { get; set; }
//public UserDTO UserDTO { get; set; }
}
Я использую WebAPI и настроил его следующим образом для возврата содержимого JSON:
var json = config.Formatters.JsonFormatter;
json.SerializerSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.Objects;
config.Formatters.Remove(config.Formatters.XmlFormatter);
-- ОБНОВЛЕНИЕ --
Я использую WebAPI и OData, поэтому результирующий вызов должен содержать объект ProjectEditorDTO
из пункта назначения ProjectEditor
:
modelBuilder.EntitySet<Core.UI.Models.ProjectEditorDTO>("ProjectEditor");
Данные, возвращаемые клиентом, передаются через URL-адрес OData:
?$format=json&$inlinecount=allpages&$top=10
Когда я добавляю синтаксис $expand=
($format=json&$inlinecount=allpages&$top=10&$expand=DefaultContentTypeID
), я получаю следующую ошибку:
Свойство DefaultContentTypeID для типа... не является свойством навигации. Можно расширить только свойства навигации.
Хотя в db это установлено как FK.
Я предполагаю, что какой-то синтаксис расширения отсутствует и обеспечивает действительное свойство навигации?
Должно быть, я упускаю что-то действительно незначительное в этом... предложения?
DefaultContentType
за пределами объявляющего класса/пространства имен? Может что-то с этим? - person dan richardson   schedule 19.03.2014ProjectEditorDTO
:public ContentTypeDTO DefaultContentType { get; set; }
. Это то, что имеется в виду, верно? - person ElHaix   schedule 19.03.2014