Beim Serialisieren eines Objekts vom Typ 'SubSonic.Schema .DatabaseColumn' wurde ein Zirkelverweis erkannt.

.net c# entity-framework json subsonic

Frage

Ich versuche, eine einfache JSON-Rückkehr auszuführen, aber ich habe Probleme, die ich unten habe.

public JsonResult GetEventData()
{
    var data = Event.Find(x => x.ID != 0);
    return Json(data);
}

Ich bekomme ein HTTP 500 mit der Ausnahme, wie im Titel dieser Frage gezeigt. Ich habe es auch versucht

var data = Event.All().ToList()

Das gab das gleiche Problem.

Ist das ein Fehler oder meine Implementierung?

Akzeptierte Antwort

Es scheint, dass es in Ihrer Objekthierarchie Zirkelverweise gibt, die vom JSON-Serialisierer nicht unterstützt werden. Benötigen Sie alle Spalten? Sie können nur die Eigenschaften abrufen, die Sie in der Ansicht benötigen:

return Json(new 
{  
    PropertyINeed1 = data.PropertyINeed1,
    PropertyINeed2 = data.PropertyINeed2
});

Dadurch wird Ihr JSON-Objekt leichter und verständlicher. Wenn Sie viele Eigenschaften haben, kann AutoMapper verwendet werden, um automatisch zwischen DTO-Objekten und View-Objekten abzubilden.


Expertenantwort

JSON ist wie XML und verschiedene andere Formate ein baumbasiertes Serialisierungsformat. Es wird Sie nicht lieben, wenn Sie kreisförmige Verweise in Ihren Objekten haben, wie der "Baum" lauten würde:

root B => child A => parent B => child A => parent B => ...

Es gibt oft Möglichkeiten, die Navigation auf einem bestimmten Pfad zu deaktivieren. Mit XmlSerializer Sie beispielsweise die übergeordnete Eigenschaft als XmlIgnore . Ich weiß nicht, ob dies mit dem betreffenden json-Serializer möglich ist, und ob DatabaseColumn über geeignete Marker verfügt ( sehr unwahrscheinlich, da auf jede Serialisierungs-API verwiesen werden muss)



Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum