2013-07-04 6 views
5

लौटने पर खाली जेसन, सर्विसस्टैक के साथ मुझे एक बहुत ही अजीब समस्या है जब एक वर्ग जेएसओएन को क्रमबद्ध करता है - ऑब्जेक्ट खाली होते हैं, हालांकि एक्सएमएल ठीक काम करता है।सर्विसस्टैक - कक्षा

कुछ सुझाव मिला कि, JSON serializer केवल तभी काम करता है जब गुण सार्वजनिक होते हैं, लेकिन जैसा कि आप नीचे देख सकते हैं मेरी संपत्तियां सार्वजनिक हैं।

कृपया कोड और स्क्रीनशॉट के नीचे देखें। किसी भी सुझाव की बहुत सराहना की जाती है।


एक्सएमएल enter image description here
JSON enter image description here
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 

उत्तर

9

डिफ़ॉल्ट रूप से, ServiceStack केवल सार्वजनिक गुण, नहीं सार्वजनिक क्षेत्रों को क्रमानुसार जाएगा, अपने DTOs में। इसलिए आपको अपने User कक्षा में username और fullname प्रत्येक property के रूप में घोषित करने की आवश्यकता है, या फ़ील्ड को क्रमबद्ध करने के लिए ServiceStack.Text को कॉन्फ़िगर करें (JsConfig.IncludePublicFields को सही पर सेट करके)।

ध्यान दें कि JSON serialization ServiceStack.Text के लिए उपयोग किया जाता है, जबकि एक्सएमएल क्रमबद्धता के लिए, बीसीएल एक्सएमएल सीरियलाइज़र का उपयोग किया जाता है। इस प्रकार, XML बनाम जेएसओएन क्रमबद्धता की कॉन्फ़िगरेशन और व्यवहार सर्विसस्टैक के साथ इस तरह के तरीकों से भिन्न हो सकता है।

+0

एक बार उपयोगकर्ता वर्ग में 'सार्वजनिक गुण' जोड़े जाने पर सभी ठीक काम करते हैं। पारितोषिक के लिए धन्यवाद। – Iladarsda

+1

इसके अलावा, ऐसा लगता है कि आप उन गुणों को 'GetUsersAD' और' WrapperGetUsers' कक्षाओं से हटा सकते हैं, जब तक कि आप उन्हें किसी अन्य उद्देश्य के लिए उपयोग नहीं कर लेते। असल में, उन गुणों को न रखें जिन्हें आप अपने सेवा कक्षाओं में अपने अनुरोध/प्रतिक्रिया में रखना चाहते हैं, उन्हें एक अलग डीटीओ कक्षा (जैसे आपकी 'उपयोगकर्ता' कक्षा) में रखें। –

+0

मुझे यकीन नहीं था कि मुझे गुण कहां रखना चाहिए ताकि मैंने उन्हें हर जगह इस्तेमाल किया। पारितोषिक के लिए धन्यवाद। – Iladarsda

संबंधित मुद्दे