2016-12-20 4 views
0

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 bekam

Meine 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 
      }; 
    } 
+0

haben Sie versucht, [NotMapped]? – MMK

+0

@MMK: Ja. Aber ohne Erfolg. – Wiktor

+0

[ScriptIgnore (ApplyToOverrides = true)] – MMK

Antwort

0

Ich glaube, Sie suchen nach [JsonIgnore] für die Json serializer oder [IgnoreDataMember] für den Standard-XML-Serializer.

Aber ich kann in Ihrem Code sehen, die Sie verwenden [Datacontract] können Sie auf jeden Fall dies auch tun:

[DataContract] 
public class YourClass 
{ 
    [DataMember] 
    public int Id { get; set; } 
    [DataMember] 
    public string Prop1 { get; set; } 

    //ignored 
    public string IgnoredProp { get;set; } 
} 
+0

Ich benutze Json.NET nicht, ich benutze DataContractJsonSerializer. Also kann ich nicht [JsonIgnore]. Und zum zweiten Teil, wie Sie sehen können, in Teilklasse habe ich nicht [DataMember] Attribute. – Wiktor