Ich verwende Entity Framework 6, um ein Modell der DB zu erstellen. Ich habe auf Web Api 2 mit JSON ..C# WebApi 2. JSON-Serialisierung. Eigenschaft aus partiellen Klassen ausschließen
sieht auch Web-Service gebaut bekamMeine Hauptteilklassendefinition wie folgt aus: (generiert von EF (erster Code von DB), so will ich nicht hier speichern, zu viel Änderungen)
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>();
}
und ich habe auch einen anderen Teil-Klasse mit einigen zusätzlichen Eigenschaften bekommen, die ich will nicht über Web-Api zeigen.
public partial class Animal
{
[JsonIgnore]
public bool IsNew { get; set; } = false;
[JsonIgnore]
public bool IsChanged { get; set; } = false;
}
, dass mein AnimalController ist:
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);
}
ich alle vorgeschlagenen Lösung auf SO und MSDN geprüft habe, aber diese Attribute funktionieren nicht. Vielleicht habe ich irgendwo anders einen Fehler gemacht?
Danke für jede Hilfe.
Bearbeiten: DB-Modell ist in anderen Projekt und WebService ist in einem anderen, so bin ich DB-Modell zu WebService über Referenz verknüpfen.
Wie meine Register-Klasse sieht aus wie mit 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
};
}
haben Sie versucht, [NotMapped]? – MMK
@MMK: Ja. Aber ohne Erfolg. – Wiktor
[ScriptIgnore (ApplyToOverrides = true)] – MMK