2011-05-17 138 views
0

JSON.Net始終返回{}

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 

酒吧

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 

我的形式

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 

我總是{}作爲答案。怎麼了?

回答

2

這兩個類都沒有任何Public屬性或字段。如果您想將字段表示爲應該出現在JSON字符串中的值,請將它們公開。否則,就串行器而言,你給它的對象沒有有趣的值。

+0

謝謝!加工! JSON.NET可以使用get方法而不是公共成員嗎? – thom 2011-05-17 16:44:22

+0

@ thom:這是屬性的用途。如果你使用公共'Get'方法創建一個公共屬性,JSON.NET將會選擇它。不要嘗試像使用Java一樣使用getXxx()風格的方法。另請注意,如果您想*序列化您的對象,則需要進行其他更改。 – StriplingWarrior 2011-05-17 17:02:25

+0

對於它的價值,我認爲你可以通過向想要序列化的成員添加[JsonProperty屬性](http://james.newtonking.com/projects/json/help/html/T_Newtonsoft_Json_JsonPropertyAttribute.htm)來解決該語義問題無論其訪問修飾符如何。您可能必須將該類指定爲[JsonObject](http://james.newtonking.com/projects/json/help/html/T_Newtonsoft_Json_JsonObjectAttribute.htm)才能正常工作。我真的不確定我的頭頂。作爲面向對象方法的一部分,一些人在哲學上反對吸氣/安裝者,所以這可能是有用的。 – tmesser 2011-05-17 17:04:27