1

我正在尝试解析从服务返回的 Json 字符串。为简单起见,它将类似于:

Dim jsonstring = _
<s>
{"menu": {
"id": "file",
"value": "File",
"popup": {
"menuitem": [
  {"value": "New", "onclick": "CreateNewDoc()"},
  {"value": "Open", "onclick": "OpenDoc()"},
  {"value": "Close", "onclick": "CloseDoc()"}
]
}
}}
</s>.Value

现在我正在使用以下函数将 json 字符串读取到一个对象,但是所有属性总是什么都没有。我为上述字符串中的每个 json 对象创建了一个对象,并且该对象具有 Datacontract 和 Datamember 属性。请问有什么提示吗?

Dim menu = JsonObject(Of Menu)(jsonstring)
    Console.WriteLine(menu.value)

Private Function JsonObject(Of t)(jsonString As String) As t
    Dim ser As New DataContractJsonSerializer(GetType(t))
    Dim ms As New MemoryStream(Encoding.UTF8.GetBytes(jsonString))
    ms.Position = 0
    Dim obj As t = DirectCast(ser.ReadObject(ms), t)
    Return obj
End Function
4

2 回答 2

1

通过查看此调用:

Console.WriteLine(menu.value)

我怀疑 Menu 类的定义不正确...您的 Menu 类是否有一个名为“menu”的属性,并且此“menu”属性的类型是否是具有名为“id”、“value”的属性的复杂类型, '弹出窗口'?

于 2012-11-19T21:14:19.173 回答
0

谢谢回复。

我使用 Json2cshap.com 将此 Json 字符串转换为类。类 (c#) 版本如下所示。唯一的区别是我的是 VB.net,所有的类/属性都有和属性。

public class Menuitem
{
    public string value { get; set; }
    public string onclick { get; set; }
}

public class Popup
{
    public List<Menuitem> menuitem { get; set; }
}

public class Menu
{
    public string id { get; set; }
    public string value { get; set; }
    public Popup popup { get; set; }
}

public class RootObject
{
    public Menu menu { get; set; }
}

根对象(RootObject)是否应该被称为Menu?我现在无法对其进行测试,但请尝试一下您的建议。

于 2012-11-20T01:34:18.187 回答