JSON asp.net 3.5SP1 WebService (WCF ではなく、scriptservice属性を持つ従来の asp.net WebService) からオブジェクトを返そうとすると、「タイプ 'Geo.Bound' のオブジェクトをシリアル化中に循環参照が検出されました」というメッセージが表示されます。自己参照の読み取り専用プロパティが原因のエラー:
簡略化されたコード:
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
- インターフェイスの実装に使用されるため、読み取り専用プロパティを保持したいと思います。
- 「IsReference:=True」属性を Bound クラスに追加しても、何も変わりません。
- DataContractJsonSerializer (この例のように、webservice のコンテキスト外: link text ) を使用すると、機能し、正しい JSON が得られます。
- 「Bds」読み取り専用プロパティを削除すると機能します!!
理由がわかりません!これは読み取り専用のプロパティであり、DataMember 属性がなく、IgnoreDatamember 属性があり、シリアル化することは想定されていません。
「Bds」プロパティを保持し、循環参照例外を取り除く方法は?
ありがとう !