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?
geändert Vielleicht verstehe ich nicht. Es sieht so aus, als wäre 'ModelB' immer noch im resultierenden json enthalten. –
@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 –
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