Я использую Entity Framework 6 для построения модели БД. У меня есть также веб-сервис построен на Web Api 2 с JSON ..C# WebApi 2. Серийная обработка JSON. Исключить свойство из частичных классов
Мое главное определение частичного класса выглядит следующим образом: (Сформирован из EF (первый код из БД), поэтому я не хочу, чтобы хранить здесь слишком много изменений)
public partial class Animal
{
[Key]
[Column(Order = 0)]
public long AnimalId { get; set; }
[Key]
[Column(Order = 1)]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public long SpeciesId { get; set; }
[Key]
[Column(Order = 2)]
public string AnimalName{ get; set; }
public string AnimalDescription{ get; set; }
public List<AnimalTags> AnimalTags= new List<AnimalTags>();
}
и я получил также еще один частичный класс с некоторыми дополнительными свойствами, которые я не хочу, чтобы показать через Web Api.
public partial class Animal
{
[JsonIgnore]
public bool IsNew { get; set; } = false;
[JsonIgnore]
public bool IsChanged { get; set; } = false;
}
Это мой AnimalController:
public IHttpActionResult GetAnimals(long id)
{
Animal animal = (from an in db.Animal
where a.AnimalId == id
select a).FirstOrDefault();
animal.AnimalsTags= db.AnimalTags.Where(at=> at.AnimalId == animal.AnimalId).ToList();
if (animal == null)
{
return NotFound();
}
return Ok(animal);
}
Я проверил все предлагаемое решение на SO и MSDN, но эти атрибуты не работают. Возможно, я ошибся где-то в другом месте?
Спасибо за любую помощь.
Редактировать: DB Model находится в другом проекте, а WebService - в другом, поэтому я привязываю DB Model к WebService через ссылку.
Как мой класс регистра выглядит с Newtonsoft.Json:
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DataApi",
routeTemplate: "api/{controller}/{Id}",
defaults: new { Id = RouteParameter.Optional }
);
config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));
config.Formatters.JsonFormatter.SerializerSettings =
new JsonSerializerSettings
{
NullValueHandling = NullValueHandling.Ignore,
Formatting = Formatting.Indented
};
}
вы пытались [NotMapped]? – MMK
@MMK: Да. Но безуспешно. – Wiktor
[ScriptIgnore (ApplyToOverrides = true)] – MMK