J'ai les deux classes suivantes dans une application C# ASP.Net Entity Framework configuration par codeContrôleur d'API EF C# ne chargeant pas beaucoup de cartes
Classe d'installation;
public class Facility
{
public int Id { get; set; }
public string Name {get; set; }
public ICollection<SubscriberList> SubscriberLists {get; set;}
}
SubscriberList Classe;
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; }
}
Avec la configuration suivante;
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");
});
}
}
Maintenant, j'ai le ApiController suivant
public List<SubscriberList> GetSubscriberLists()
{
var list = _context.SubscriberLists
.Include(c => c.Facilities)
.ToList();
return list;
}
Lorsque vous appelez la demande Get au/api/SubscriberLists Je reçois le texte suivant JSON qui manque le "nom de l'installation"
[
{
"Id": 2,
"ClientId": 1000001,
"Facilities": [
{
"$id": "1"
}
]
},
{
"Id": 3,
"ClientId": 1000002,
"Facilities": [
{
"$id": "2"
},
{
"$id": "3"
}
]
}
]
Comme vous pouvez le voir, il ne renvoie pas le Facility.Name
, seul le Facility.Id
. J'ai essayé en ajoutant le mot-clé virtual avant ICollection. Essayé de changer ICollection<>
à IList<>
ainsi qu'à List<>
Également essayé d'ajouter l'attribut [JsonProperty("Facilities")]
au-dessus du champ Facilities
. Également essayé d'itérer la liste renvoyée interrogeant les installations pour déclencher le chargement. Rien n'a aidé jusqu'à présent.
La chose intéressante est que dans le mode de débogage, je peux voir tout chargé comme prévu, je vois tous les champs Facility.Name
peuplés. Je crains que le problème ici se trouve au Json Serializer, mais je n'ai aucune idée de comment résoudre ce problème.
Quelle est ma prochaine étape?
Merci à l'avance
Modifier;
À ajouter. Lorsque vous naviguez vers l'URL Api dans le navigateur, ce qui entraîne l'obtention de données XML au lieu de JSON, j'obtiens le résultat suivant dans le tableau Facilities
.
<Facilities>
<Facility xmlns:z="http://schemas.microsoft.com/2003/10/Serialization/" z:Id="i1"/>
</Facilities>
Êtes-vous sûr que l'installation avec ID 4 a autre nom puis 'null' dans votre DB? –
@VadimMartynov Oui, le Facility Id 4 (maintenant 2) a un nom, mais c'est encore plus étrange, que les numéros $ id qu'il renvoie ne proviennent pas réellement de la base de données, il incrémente juste pour chaque instance dans les données retournées. (J'ai omis quelques réponses pour plus de simplicité, je l'ai maintenant mis à jour à 1,2 et 3) –
Cela ressemble au résultat du sérialiseur JSON ['ReferenceLoopHandling'] (http://www.newtonsoft.com/json/help/ html/SerializationSettings.htm) défini sur 'Ignorer'. Avez-vous des problèmes de désérialisation de JSON? –