当试图从 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
- 我想保留只读属性,因为它用于实现接口。
- 向 Bound 类添加“IsReference:=True”属性不会改变任何内容。
- 如果我使用 DataContractJsonSerializer (在 web 服务的上下文之外,像这个例子:链接文本),它可以工作并且我有一个正确的 JSON。
- 如果我删除“Bds”只读属性,它就可以工作!
我不明白为什么!这是一个只读属性,没有 DataMember 属性,具有 IgnoreDatamember 属性,它不应该被序列化!
如何保持“Bds”属性,摆脱循环引用异常?
谢谢 !