Ich habe die folgenden zwei Klassen in einer C# ASP.Net-Anwendung Entity Framework Code-erste EinrichtungC# EF API-Controller nicht viele zu viele Array geladen
Facility Class;
public class Facility
{
public int Id { get; set; }
public string Name {get; set; }
public ICollection<SubscriberList> SubscriberLists {get; set;}
}
SubscriberList Klasse;
Public class SubscriberList
{
public SubscriberList()
{
Facilities = new HashSet<Facility>(); //not sure if I need this.
}
public int Id { get; set; }
public int ClientId { get; set; }
public ICollection<Facility> Facilities { get; set; }
}
Mit der folgenden Konfiguration;
public class SubscriberListConfiguration : EntityTypeConfiguration<SubscriberList>
{
public SubscriberListConfiguration()
{
HasMany(w => w.Facilities)
.WithMany(s => s.SubscriberLists)
.Map(m =>
{
m.ToTable("SubscriberListFacilities");
m.MapLeftKey("SubscriberListId");
m.MapRightKey("FacilityId");
});
}
}
Jetzt habe ich folgendes ApiController
public List<SubscriberList> GetSubscriberLists()
{
var list = _context.SubscriberLists
.Include(c => c.Facilities)
.ToList();
return list;
}
Wenn Sie mit dem/api die Get-Anfrage Aufruf/SubscriberLists ich folgendes Json erhalten, die die "Einrichtungsname"
[
{
"Id": 2,
"ClientId": 1000001,
"Facilities": [
{
"$id": "1"
}
]
},
{
"Id": 3,
"ClientId": 1000002,
"Facilities": [
{
"$id": "2"
},
{
"$id": "3"
}
]
}
]
fehlt
Wie Sie sehen können, gibt es nicht die Facility.Name
, nur die Facility.Id
. Ich habe versucht, indem Sie das virtuelle Schlüsselwort vor der ICollection hinzufügen. Versuchte Änderung ICollection<>
zu IList<>
sowie zu List<>
Auch versucht, das Attribut [JsonProperty("Facilities")]
oben auf dem Feld Facilities
hinzuzufügen. Es wurde auch versucht, die zurückgegebene Liste zu durchlaufen und die Einrichtungen abzufragen, um das Laden auszulösen. Nichts half bisher.
Die interessante Sache ist, dass im Debug-Modus kann ich sehen, alles wie erwartet geladen, ich sehe alle Facility.Name
Felder ausgefüllt. Ich fürchte, das Problem liegt hier am Json-Serializer, aber ich habe keine Ahnung, wie ich das beheben soll.
Was ist mein nächster Schritt?
Vielen Dank im Voraus
bearbeiten;
Es lohnt sich hinzuzufügen. Beim Navigieren zu der API-URL im Browser, was dazu führt, dass XML-Daten anstelle von JSON abgerufen werden, erhalte ich das folgende Ergebnis im Array Facilities
.
<Facilities>
<Facility xmlns:z="http://schemas.microsoft.com/2003/10/Serialization/" z:Id="i1"/>
</Facilities>
sind ein wenig aus, vielleicht, ist versuchen, dass die Anlage mit der ID 4 hat einen anderen Namen 'null' dann in Ihrem DB? –
@VadimMartynov Ja, die Facility Id 4 (jetzt 2) hat einen Namen, aber das ist noch merkwürdiger, dass die zurückgegebenen $ id Nummern nicht wirklich von der Datenbank sind, sondern nur für jede Instanz in den zurückgegebenen Daten. (Ich habe einige der Antworten der Einfachheit halber weggelassen. Ich habe sie jetzt auf 1,2 und 3 aktualisiert) –
Das klingt nach dem Ergebnis des JSON-Serialisierers ['ReferenceLoopHandling'] (http://www.newtonsoft.com/json/help/) html/SerializationSettings.htm) auf 'Ignore' setzen. Haben Sie Probleme, JSON zu deserialisieren? –