.net vb.net json.net

Deserializar usando JSON.net



vb.net (1)

Sus clases son bastante cercanas, parece que posiblemente intentó mejorar un poco las cosas, como cambiar los codes a Codes pero al hacerlo, las propiedades ya no coinciden. Puede cambiar los nombres de clase pero no los nombres de propiedad (al menos no de esa manera):

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

El uso de las propiedades de AutoImplement, disponibles desde hace un tiempo, significa que puede omitir todo el código Get , Set repetitivo. VS creará las clases para ti también:
Menú Editar -> Pegado especial -> Pegar Json como clases

A veces tiene que ajustar la clase si hay una propiedad de matriz / lista. Por ejemplo, los robots pueden escribir:

Public Property elements() As Element

Cuando debería ser:

Public Property elements As Element()

La clase contenedor muestra cómo usar <JsonProperty("pname")> para cambiar el nombre de la propiedad si lo desea. Esto a menudo debe hacerse para crear un alias para un nombre de propiedad que es una palabra clave en VB ( Return , Error , etc.). En este caso, cambié los codes y links para que fueran Lists como lo hiciste.

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

Resultado:

6 6
TÍTULO 1
TÍTULO 2
TÍTULO 3

Soy muy nuevo en json, JSON.net y todo eso. Después de leer preguntas similares aquí, no puedo hacer que mi código funcione. ¿Cuál es exactamente mi error? ¿Qué he supervisado? ¿Es posible omitir las clases "enlaces" y "meta" con fines de prueba o tengo que definir CADA propiedad?

Tengo la siguiente salida 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 } }

Como entendí, necesito tres clases: por ejemplo, códigos, enlaces y meta.

Creé una clase "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

Y creé una clase clsValuelist:

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

Cuando trato de deserializarlo obtengo "nada" como en "CoolOutput"

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