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 中的公共属性,而不是公共字段。因此,您需要在您的类中声明usernameand fullnameeach 作为 a ,或者配置 ServiceStack.Text 以序列化字段(通过设置为 True)。propertyUserJsConfig.IncludePublicFields

请注意,对于 JSON 序列化,使用ServiceStack.Text,而对于 XML 序列化,使用 BCL XML 序列化程序。因此,XML 与 JSON 序列化的配置和行为可能在这些方面与 ServiceStack 不同。

于 2013-07-04T13:39:27.670 回答