2017-03-17 2 views
0

ASP.NET 웹 API를 사용하여 사용자 지정 클래스 개체를 반환하고 있습니다. 이 클래스에는 여러 속성이 있으며 그 중 하나는 선택적 매개 변수를 사용합니다. 선택적 매개 변수가있는 속성을 제외한 모든 속성을 결과 JSON 응답에서 사용할 수 있습니다. 선택적 매개 변수를 제거하면 다른 속성도 사용할 수 있습니다. 선택적 매개 변수를 사용하여 다른 속성을 제자리에 반환하는 방법은 무엇입니까? 감사! 매개 변수와 함께ASP.NET 웹 API - 반환 개체 - 속성 없음

Public Function GetCustomer(id As Integer) As Object 
    Dim customer As customer = New customer(id) 
    Return customer 
End Function 
+0

정확하게 어떤 문제가 당신이 문제를 –

답변

0

프로퍼티 : 내가 JSON을 반환 사용하고 API를 컨트롤러 기능 여기

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 직렬화를 위해 Web API에서 사용되는 Json.Net은 index 매개 변수가 선택적 일지라도 색인 된 속성을 직렬화하지 않습니다. (당신은 DefaultContractResolver 클래스의 GetSerializableMembers 방법에 대한 source code에 자신이 볼 수 있습니다.)

가장 간단한 해결 방법은 당신이 그것을 원하는 매개 변수 값으로 인덱서를 호출하여 클래스에 대한 별도의 인덱싱되지 않은 속성을 추가하는 것입니다 직렬화 할 때 필요합니다. 원하는 경우 비공개로 설정할 수 있습니다. 만약 그렇다면, serializer가이를 "볼"수 있도록 <JsonProperty> 속성으로 표시하기 만하면됩니다. 또한이 속성을 사용하여 대체 속성을 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

+0

감사를 복제하는 우리에게 길을 포기하지 않고 발생하는! 이것은 1 톤을 도왔다! –