6

クラスを JSON にシリアル化するときに、ServiceStack に非常に奇妙な問題があります。オブジェクトは空ですが、XML は正常に機能します。

JSONシリアライザーは、プロパティがパブリックである場合にのみ機能するという提案が見つかりましたが、以下に示すように、私のプロパティはパブリックです。

以下のコードとスクリーンショットをご覧ください。どんな提案でも大歓迎です。


XML ここに画像の説明を入力
JSON ここに画像の説明を入力
GetUsers.aspx.vb

Public Class GetUsersAD

        Public Property username As String
        Public Property fullname As String


        Public Function HandleRequest()

              Dim _users As New List (Of User)
             _users = GetUsersTest(_users)
              Return _users

        End Function

        Public Function GetUsersTest(_users As List (Of User)) As List ( Of User )

              Dim dt As New DataTable
             dt.Columns.Add( "username" )
             dt.Columns.Add( "fullname" )

              For x As Integer = 0 To 5

                     Dim newUserRow As DataRow = dt.NewRow()
                    newUserRow( "username" ) = "username-" & x & ""
                    newUserRow( "fullname" ) = "fullname-" & x & ""
                    dt.Rows.Add(newUserRow)

              Next

              For Each row As DataRow In dt.Rows

                     Dim _user As New User
                    _user.username = row( "username" )
                    _user.fullname = row( "fullname" )
                    _users.Add(_user)

              Next


              Return _users

        End Function

End Class

Public Class User

        Public username As String = ""
        Public fullname As String = ""


End Class

Public Class Users

        Public username As String = ""
        Public fullname As String = ""


End Class

WS.vb

Public Class WrapperGetUsers

    Implements IService(Of GetUsersAD)

    Public Property username As String
    Public Property fullname As String

    Public Function Execute(ByVal request As GetUsersAD) As Object Implements ServiceStack.ServiceHost.IService(Of GetUsersAD).Execute

        Return request.HandleRequest()

    End Function


End Class
4

1 に答える 1

10

デフォルトでは、ServiceStack はDTO 内のパブリックフィールドではなく、パブリックプロパティのみをシリアル化します。そのため、とそれぞれをクラスで として宣言するか、フィールドをシリアル化するように ServiceStack.Text を構成する必要があります ( True に設定)。usernamefullnamepropertyUserJsConfig.IncludePublicFields

JSON シリアライゼーションではServiceStack.Textが使用され、XML シリアライゼーションでは BCL XML シリアライザーが使用されることに注意してください。したがって、XML と JSON のシリアル化の構成と動作は、ServiceStack ではこのように異なる場合があります。

于 2013-07-04T13:39:27.670 に答える