我正在使用ASP.NET Web API返回自定义类对象。该类有几个属性,其中一个属性采用可选参数。除了带有可选参数的属性之外的所有属性都可以在生成的JSON响应中使用。如果我删除了可选参数,那么其他属性也可用。有什么方法可以使用可选参数返回其他属性吗?谢谢!
以下是我遇到问题的具体属性:
Public Class customer
...
Public ReadOnly Property photoSrc(Optional shape As String = Nothing) As String
Get
Dim srcString = "/Images/User.png"
If shape = "square" Then
srcString = "/Images/UserSquare.png"
End If
Return srcString
End Get
End Property
...
End Class
这是我用来返回json的api控制器函数:
Public Function GetCustomer(id As Integer) As Object
Dim customer As customer = New customer(id)
Return customer
End Function
答案 0 :(得分:0)
带参数的属性称为索引属性或索引器。根据设计,即使index参数是可选的,Json.Net(Web API用于JSON序列化)也不会序列化索引属性。 (您可以在GetSerializableMembers
类的DefaultContractResolver
方法的source code中自行查看。
最简单的解决方法是向您的类添加一个单独的非索引属性,该属性使用您希望序列化时具有的参数值调用索引器。如果您愿意,您可以将酒店设为私人;如果你这样做,你只需要用<JsonProperty>
属性标记它,以允许序列化器看到&#34;看到&#34;它。您还可以使用此属性为备用属性在JSON中提供与其替换的索引属性相同的名称。
Public Class Customer
...
<JsonProperty("photoSrc")>
Private ReadOnly Property defaultPhotoSrc As String
Get
Return photoSrc()
End Get
End Property
Public ReadOnly Property photoSrc(Optional shape As String = Nothing) As String
Get
Dim srcString = "/Images/User.png"
If shape = "square" Then
srcString = "/Images/UserSquare.png"
End If
Return srcString
End Get
End Property
...
End Class