2016-07-29 16 views
0

Ich habe einige Probleme mit meiner WebAPI.C# API Entfernen von Objekten

Ich habe folgende Modelle.

ModelA

Guid id; 
String name; 
Guid ModelBId; 
virtual ModelB ModelB; 

Modell B

Guid id; 
String name; 

ich eine Liste mit zwei Instanzen von ModelA erstellen, jede Instanz einen Namen hat und den gleichen Bezug auf Modell B, exemple:

obj1 = New ModelA("myName", "1edh-..."); 
obj2 = New ModelA("otherName", "1edh-..."); 

Beide Objekte verweisen auf das gleiche ModelB-Objekt, also schließe ich die beiden in eine Liste ein.

List<ModelA> myList = new List<ModelA>(); 
myList.Add(obj1); 
myList.Add(obj2); 

Nun, wenn ich auf „myList“ auf Debugger aussehen kann ich die beiden Verweise auf Modell B sehen, aber wenn mein Controller es meinen Kunden zurückgibt, einer von ihnen verschwindet.

[HttpGet] 
public IHttpActionResult Get(string id) 
    { 
     try 
     { 
      var myList = _uow.functionality.Get(id); 
      //myList contains two objects, just like the example 
      return Ok(myList); 
     } 
     catch (Exception ex) 
     { 
      return BadRequest(ex.Message); 
     } 
    } 

Die Json, die zu meinem Benutzer zurückgegeben wird die folgende

[ 
    {$id: 1, 
    id: 'ed32-...', 
    name: 'myName', 
    ModelB: { $id: 2, 
       $ref: 1, 
       id: '', 
       name: ''}}, 
    {$id: 3, 
    id: 'e3df-...', 
    name: 'otherName', 
    ModelB: { $ref: 2 }} 
] 

Warum es mein Modell B von der json auf Senden an meinen Klienten nicht entfernen?

+0

geändert Vielleicht verstehe ich nicht. Es sieht so aus, als wäre 'ModelB' immer noch im resultierenden json enthalten. –

+0

@SamIam Ja, ModelB gibt die erste Relation zurück, aber es wird von der zweiten Relation ausgeschlossen und durch ein $ ref in die $ ID der ersten Relation –

+2

ersetzt. Die Web-API verwendet [tag: json.net]. Irgendwo müssen Sie ['PreserveReferencesHandling'] aktiviert haben (http://www.newtonsoft.com/json/help/html/PreserveReferencesHandlingObject.htm). Diese Einstellung ermöglicht die Serialisierung von Viele-zu-Viele-Referenzen zwischen Objekten in einem Graphen, indem jedes Objekt beim ersten Auftreten im Graphen mit einer '$ id'-Eigenschaft gekennzeichnet wird und anschließend nur eine' $ ref'-Eigenschaft für nachfolgende Referenzen serialisiert wird. – dbc

Antwort

1

@dbc Vorschlag folgend, ich habe die Json Serialisierung von

formatters.JsonFormatter.SerializerSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.All; 

Um

formatters.JsonFormatter.SerializerSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.None; 
formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling 
      = Newtonsoft.Json.ReferenceLoopHandling.Ignore; 
0

Ist die Rückkehr der Ordnung irgendein Licht? Vielleicht versuchen Sie, die Liste in einem anderen Format, z. ein gerades JSON-Objekt

+0

Habe versucht, ohne Ergebnis = s –