2011-05-17 3 views
0

FooJSON.Net retourne toujours {}

Public Class Foo 
    Private fooz As Object 
    Private alao As ArrayList 

    Public Sub New(ByVal pfooz) 
     Me.fooz = New Object 
     Me.alao = New ArrayList() 

     Me.alao.Add(1) 
     Me.alao.Add(2) 
     Me.alao.Add(3) 
     Me.alao.Add(4) 
     Me.alao.Add(5) 
    End Sub 
End Class 

Bar

Public Class Bar 
    Private baz As Integer 
    Private bar As String 
    Private foo As Foo 

    Public Sub New(ByVal pbaz, ByVal pbar, ByVal pfoo) 
     Me.baz = pbaz 
     Me.bar = pbar 
     Me.foo = pfoo 
    End Sub 
End Class 

Ma forme

Public Class Form1 

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
     Dim foo As Foo = New Foo(New Object) 
     Dim bar As Bar = New Bar(1, "FOOOOOOOOOOOOO, bar?", foo) 
     Dim fooString As String 
     Dim barString As String 

     fooString = Newtonsoft.Json.JsonConvert.SerializeObject(foo) 
     barString = Newtonsoft.Json.JsonConvert.SerializeObject(bar) 

     MsgBox(fooString) 
     MsgBox(barString) 
    End Sub 
End Class 

Je reçois toujours {} comme réponse. Qu'est-ce qui ne va pas?

Répondre

2

Aucune de ces classes n'a des propriétés ou champs Public. Si vous souhaitez représenter vos champs en tant que valeurs devant être présentes dans une chaîne JSON, rendez-les publics. Sinon, en ce qui concerne le sérialiseur, vous lui donnez des objets sans valeur intéressante.

+0

Merci beaucoup! Travail! Est-il possible de JSON.NET utilise des méthodes get à la place des membres publics? – thom

+0

@thom: Voilà ce que sont les propriétés. Si vous créez une propriété publique avec une méthode publique 'Get', JSON.NET la récupèrera. N'essayez pas d'utiliser les méthodes 'getXxx()' -style comme en Java. Notez également que des modifications supplémentaires seront nécessaires si vous souhaitez * de * sérialiser votre objet. – StriplingWarrior

+0

Pour ce que ça vaut, je pense que vous pouvez contourner cette sémantique en ajoutant l'attribut [JsonProperty] (http://james.newtonking.com/projects/json/help/html/T_Newtonsoft_Json_JsonPropertyAttribute.htm) aux membres que vous voulez sérialiser indépendamment de son modificateur d'accès. Vous devrez peut-être désigner la classe en tant que [JsonObject] (http://james.newtonking.com/projects/json/help/html/T_Newtonsoft_Json_JsonObjectAttribute.htm) pour que cela fonctionne correctement. Honnêtement, je ne suis pas sûr de la tête. Certaines personnes sont philosophiquement opposées aux getters/setters dans le cadre de la méthodologie OO, donc cela peut être utile. – tmesser