ASP.NET Web API - 返回对象 - 属性缺失

时间:2017-03-17 00:49:47

标签: asp.net api class object json.net

我正在使用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

1 个答案:

答案 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

小提琴:https://dotnetfiddle.net/ffNs9D