【问题标题】:JSON.Net Always returns {}JSON.Net 总是返回 {}
【发布时间】:2011-05-17 16:37:31
【问题描述】:

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

我总是得到 {} 作为答案。怎么了?

【问题讨论】:

    标签: .net vb.net json json.net


    【解决方案1】:

    这些类都没有任何Public 属性或字段。如果要将字段表示为应出现在 JSON 字符串中的值,请将它们公开。否则,就序列化程序而言,您给它的对象是没有有趣值的对象。

    【讨论】:

    • 谢谢!在职的! JSON.NET 是否可以使用 get 方法而不是公共成员?
    • @thom:这就是属性的用途。如果您创建一个带有公共Get 方法的公共属性,JSON.NET 会选择它。不要尝试像在 Java 中那样使用 getXxx() 风格的方法。另请注意,如果您想de序列化您的对象,则需要进行其他更改。
    • 对于它的价值,我认为您可以通过将JsonProperty Attribute 添加到要序列化的成员中来绕过该语义,而不管其访问修饰符如何。您可能必须将类指定为 JsonObject 才能正常工作。老实说,我不确定我的头顶。有些人在哲学上反对将 getter/setter 作为 OO 方法的一部分,因此这可能很有用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-04
    • 2016-11-02
    相关资源
    最近更新 更多