JSON.net का उपयोग कर वर्णन करें



vb.net (1)

मैं json, JSON.net और वह सब करने के लिए बहुत नया हूं। यहाँ अनजाने प्रश्नों को पढ़ने के बाद मैं अपना कोड काम नहीं कर सकता। वास्तव में मेरी क्या त्रुटि है? मैं क्या देख रहा हूँ? क्या परीक्षण प्रयोजनों के लिए कक्षाएं "लिंक" और "मेटा" को छोड़ना संभव है या क्या मुझे हर संपत्ति को परिभाषित करना होगा?

मुझे निम्नलिखित REST आउटपुट मिला है:

{
   "codes" : [
      {
         "href" : "https://www.someserver.com/form_definitions/OIlG4GxMyeh0sdrt3AYuaXbauGicW71M/field_definitions/zFEova6LiPM/codes/4Sxnr961xzM",
         "rel" : "document_field_definition_code",
         "title" : "TITLE 1"
      },
      {
         "href" : "https://www.someserver.com/form_definitions/OIlG4GxMyeh0sdrt3AYuaXbauGicW71M/field_definitions/zFEova6LiPM/codes/buho0CsLc5k",
         "rel" : "document_field_definition_code",
         "title" : "TITLE 2"
      },
      {
         "href" : "https://www.someserver.com/form_definitions/OIlG4GxMyeh0sdrt3AYuaXbauGicW71M/field_definitions/zFEova6LiPM/codes/RvQoykUM_Sk",
         "rel" : "document_field_definition_code",
         "title" : "TITLE 3"
      }
   ],
   "links" : [
      {
         "about" : "https://www.someserver.com/form_definitions/OIlG4GxMyeh0sdrt3AYuaXbauGicW71M/field_definitions/zFEova6LiPM/codes?about=1",
         "href" : "https://www.someserver.com/form_definitions/OIlG4GxMyeh0sdrt3AYuaXbauGicW71M/field_definitions/zFEova6LiPM/codes",
         "method" : "GET",
         "rel" : "self",
         "title" : null,
         "type" : "codes"
      },
      {
         "href" : "https://www.someserver.com/form_definitions/OIlG4GxMyeh0sdrt3AYuaXbauGicW71M/field_definitions/zFEova6LiPM/codes",
         "method" : "POST",
         "rel" : "codes",
         "title" : "create new codes entity"
      }
   ],
   "meta" : {
      "description" : null,
      "last_page" : 1,
      "page_offset" : 0,
      "page_size" : 50,
      "query-template" : "/codes{?query_search,page_offset,page_size,query_identification,embedded,properties,about}",
      "total" : 6
   }
}

जैसा कि मुझे पता है कि मुझे तीन वर्गों की आवश्यकता है: जैसे कोड, लिंक और मेटा।

मैंने एक वर्ग बनाया "clscodes":

Public Class clsCode
    Private m_href As String
    Private m_rel As String
    Private m_title As String

    Public Property Href As String
        Get
            Return m_href
        End Get
        Set(value As String)
            m_href = value
        End Set
    End Property

    Public Property Rel As String
        Get
            Return m_rel
        End Get
        Set(value As String)
            m_rel = value
        End Set
    End Property

    Public Property Title As String
        Get
            Return m_title
        End Get
        Set(value As String)
            m_title = value
        End Set
    End Property
End Class

और मैंने एक वर्ग बनाया

Public Class clsWerteliste

    Private m_code As IList(Of clsCode)

    Public Property Code() As clsCode()
        Get
            Return m_code
        End Get
        Set(value As clsCode())
            m_code = value
        End Set
    End Property
End Class

जब मैं इसे "कूलऑटपुट" के रूप में "कुछ भी नहीं" प्राप्त करने की कोशिश करता हूं

Dim CoolOutput As New clsWerteliste
CoolOutput = JsonConvert.DeserializeObject(Of clsWerteliste)(jsonstring)

आपकी कक्षाएं बहुत करीब हैं, ऐसा लगता है कि आपने संभवतः Codes को Codes में बदलने के लिए बहुत कुछ करने की कोशिश की है, लेकिन ऐसा करने में गुण लंबे समय तक मेल खाते हैं। आप वर्ग के नाम बदल सकते हैं लेकिन संपत्ति के नाम नहीं (कम से कम इस तरह से नहीं):

Public Class CodeLinkContainer
    <JsonProperty("codes")>
    Public Property Codes As IList(Of Code)
    <JsonProperty("links")>
    Public Property Links As IList(Of Link)
    <JsonProperty("meta")>
    Public Property Meta As Meta
End Class

Public Class Meta
    Public Property description As Object
    Public Property last_page As Integer
    Public Property page_offset As Integer
    Public Property page_size As Integer
    Public Property querytemplate As String
    Public Property total As Integer
End Class

Public Class Code
    Public Property href As String
    Public Property rel As String
    Public Property title As String
End Class

Public Class Link
    Public Property about As String
    Public Property href As String
    Public Property method As String
    Public Property rel As String
    Public Property title As String
    Public Property type As String
End Class

कुछ समय के लिए उपलब्ध AutoImforce गुण का उपयोग करना, इसका मतलब है कि आप सभी Get , Set boilerplate कोड को छोड़ सकते हैं। VS आपके लिए भी कक्षाएं बनाएगा:
संपादित करें मेनू -> विशेष पेस्ट करें -> वर्गों के रूप में पेस्ट करें

यदि कभी-कभी कोई सरणी / सूची गुण है, तो आपको कक्षा को ट्विक करना होगा। उदाहरण के लिए, रोबोट लिख सकते हैं:

Public Property elements() As Element

यह कब होना चाहिए:

Public Property elements As Element()

कंटेनर वर्ग दिखाता है कि यदि आप चाहें तो संपत्ति का नाम बदलने के लिए <JsonProperty("pname")> का उपयोग कैसे करें। यह अक्सर एक प्रॉपर्टी के नाम के लिए एक उपनाम बनाने के लिए किया जाना चाहिए जो VB ( Return , Error आदि) में एक महत्वपूर्ण शब्द है। इस मामले में, मैंने codes और links को बदल दिया जैसा कि आपने किया था।

    Dim jstr = ... from whereever

    Dim CodeLinks = JsonConvert.DeserializeObject(Of CodeLinkContainer)(jstr)

    Console.WriteLine(CodeLinks.meta.total)
    For Each Item In CodeLinks.codes
        Console.WriteLine(Item.title)
    Next

नतीजा:

6
टाइटल 1
शीर्षक २
टाइटल 3





json.net