生成JSON

我们当然可以手工编码生成JSON,但是比较繁琐,容易出错。

如果采用Newtonsoft.JSON生成,会变得简单可靠。


Foxtable已经引入了以下两个命名空间:


Newtonsoft.Json
Newtonsoft.Json.Linq

你可以直接在代码中使用
Newtonsoft.JSON进行JSON的系列化和反系列化。

如果已经熟悉了
Newtonsoft.JSON,可以跳过本节内容。

示例一

根据现有对象生成JSON。

例如根据当前登录用户生成JSON,可在命令窗口执行:


Dim
jo As JObject = JObject.FromObject(User)
Dim
js As String = jo.ToString()
Output
.Show(js)

显示的结果为:

{
"Name": "张三",
"Group": null,
"Type": 2,
"Tag": null,
"Roles": "经理",
"Default": false,
"ExtendedValues": {}
}

示例二

动态生成JSON。

在命令窗口执行:

Dim jo As New JObject
jo
("Name") = "张三"
jo
("Group") = "VIP"
jo
("Type") = 2
jo
("Default") = False
Output
.Show(jo.ToString)

显示的结果为:

{
"Name": "张三",
"Group": "VIP",
"Type": 2,
"Default": false
}

示例三

生成包括嵌套对象的JSON。

在命令窗口执行:

Dim jo As New JObject
jo
("name") = "李云龙"
jo
("age") = "36"
jo
("card") = New JObject
jo
("card")("bank") = "工行"
jo
("card")("account") = "12345678"
Output
.Show(jo.ToString)

显示的结果为:

{
  "name": "
李云龙",
  "age": "36",
  "card": {
    "bank": "
工行
",
    "account": "12345678"
  }
}

示例四

生成包括数组的JSON。

在命令窗口执行:

Dim jo As New JObject
jo
("Name") = "张三"
jo
("Group") = "VIP"
Dim
ja As New Jarray '定义数组
ja
.Add("manager")
ja
.Add("developer")
jo
("Roles") = ja '将Roles设置为前面定义的数组
Output
.Show(jo.ToString)

显示的结果为:

{
  "Name": "
张三",
  "Group": "VIP",
  "Roles": [
    "manager",
    "developer"
  ]
}

下面是一段完全等效的代码,希望大家体会,在实际开发过程中灵活运用:

Dim jo As New JObject
Dim
values() As String = {"manager","developer"}
jo
("Name") = "张三"
jo
("Group") = "VIP"
jo
("Roles") = New Jarray(values)
Output
.Show(jo.ToString)

示例五

生成包括对象数组的JSON。

在命令窗口执行:

Dim jo As New JObject
Dim
ja As New JArray
jo
("dept") = "销售部"
jo
("mpr") = "赵刚"
jo
("staff") =  ja '
ja
.Add(New JObject) '给数组添加两个对象成员
ja
.Add(New JObject)
ja
(0)("name") = "李云龙"
ja
(0)("age") = 36
ja
(1)("name") = "黄晓明"
ja
(1)("age") = 26
Output
.Show(jo.ToString)

显示的结果为:


{
  "dept": "
销售部",
  "mpr": "
赵刚",
  "staff": [
    {
      "name": "
李云龙",
      "age": 36
    },
    {
      "name": "
黄晓明",
      "age": 26
    }
  ]
}


对象数组也是一个数组,只不过这个数组的成员也是JObject,JObject的成员可以是数组,数组的成员可以是JObject,二者可以层层嵌套,生成任意复杂的JSON。


本页地址:http://www.foxtable.com/mobilehelp/topics/0167.htm