Wenn ein Objekt aus einer JSON asp.net 3.5SP1 WebService zurückzukehren versuchen (nicht WCF, klassische asp.net WebService mit Script Attribut), habe ich eine "eine kreisförmige Referenz detektiert wurde, während ein Objekt des Typs 'Geo.Bound' Serialisierung" Fehler, verursacht durch einen selbstverweis Read-only-Eigenschaft:Serialisierung Kreis Ausnahme verursacht durch sich selbst verweis Read-only Eigenschaft
Vereinfachtes Code:
Namespace Geo
<DataContract(Namespace:="Geo", IsReference:=True)> _
Public Class Bound
<DataMember(Name:="sw", IsRequired:=False)> _
Public SouthWestCoord As Double
Public Sub New()
SouthWestCoord = 1.5#
End Sub
<IgnoreDataMember()> _
Public ReadOnly Property Bds() As Bound
Get
Return Me
End Get
End Property
End Class
End Namespace
- I Ich möchte die Read-Only-Eigenschaft beibehalten, da sie zum Implementieren einer Schnittstelle verwendet wird.
- Das Hinzufügen eines Attributs "IsReference: = True" zur Bound-Klasse ändert nichts.
- Wenn ich einen DataContractJsonSerializer verwende (außerhalb des Kontexts des Webservice, wie dieses Beispiel: link text), funktioniert es und ich habe einen korrekten JSON.
- Wenn ich die "BDS" Read-only-Eigenschaft entfernen, funktioniert es !!
Ich verstehe nicht warum! Es handelt sich um eine schreibgeschützte Eigenschaft ohne ein DataMember-Attribut mit einem IgnoreDatamember-Attribut, das nicht serialisiert werden soll!
Wie behalten Sie die "Bds" -Eigenschaft, und entfernen Sie die zirkuläre Referenz Ausnahme?
Danke!
Wie haben Sie WCF für die Arbeit mit DataContractJsonSerializer eingerichtet? Vielleicht hast du da einen Fehler gemacht? –
Meine Frage war nicht klar, also habe ich es bearbeitet: es ist ein klassischer asp.net-Dienst (nicht WCF), der Test mit DataContractJsonSerializer war außerhalb des Kontexts eines Webservice. – PlageMan